Datenbankfelder säubern

Vorab, ich bin von combitCRM von Tag zu Tag begeisterter. Das System bietet so viele Möglichkeiten für Eigenentwicklungen, dass man eine Menge an Exceltabellen ablösen kann.

So baut man neue Ansichten auf, verknüpft dies mit vorhandenen etc. Dadurch werden immer wieder neue ID-Felder angelegt, damit die Relationen angelegt werden.

Problem: Wenn es doch nicht so klappt, wie gedacht und man neue Ansichten wieder verwirft, kann es sein, dass in den einzelnen Datentabellen Felder sind, die gar nicht mehr benötigt werden, sozusagen „verwaist“ sind. Darüber den Überblick zu behalten, ist nicht einfach.

Gibt es eine Möglichkeit in combitCRM, solche unbenutzten Felder aufzuspüren?

Gruß aus der Oberlausitz

Das freut uns natürlich mächtig! :heart_eyes:

Verwaiste Felder: Leider nicht als simples „single click“-Feature.

Das liegt daran, dass wenn irgendein Scriptquellcode auf irgendeiner Serverfreigabe rumliegt und darin auf dieses Feld zugegriffen wird, es dann ein Problem gibt, wenn wir behaupten, dieses Feld sei verwaist, weil wir keine Kenntnis von dieser Scriptdatei haben.

Außerdem gibt es Lösungen, die dies Felder „hinterrücks“ befüllen/benötigen, um zum Beispiel in heterogenen Umgebungen Drittsysteme anzubinden bzw. eine Beziehung zu dortigen Daten herzustellen. Aus combit CRM-Sicht ist diese Feld eigentlich gar nicht wirklich „im Spiel“. Aber dennoch essentiell.

Dann gibt es noch Felder, die wichtig sind, aber visuell/interaktiv nie eine Rolle spielen, sondern nur in irgendwelchen ausgeklügelten freien SQL-Abfragefiltern.

Und so weiter…

Um die Hosen runterzulassen: wir kriegen das einfach nicht wasserdicht hin. Und wenn es nicht wasserdicht ist, dann lieber sagen, dass wir es nicht wissen, als so eine „recht wahrscheinlich aber ohne Gewähr“-Aussage, von der Sie sich dann bei Irrtum nichts kaufen können, wenn das Feld dann weg ist und doch gebraucht wird.

Was Sie machen könnten:

Folgende Abfrage liefert Ihnen eine Liste der Felder einer bestimmten Tabelle (hier: „Contacts“) sortiert nach der Anzahl unterschiedlicher Inhalte. Unter der Annahme, dass Test-Felder nicht gefüllt sind, weil sie gar nicht zum Leben erwachten, könnten Sie hier zumindest potentielle Kandidaten zuoberst in der Liste finden. :nerd_face:

DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql = @sql + 
'SELECT ''' + COLUMN_NAME + ''' AS ColumnName, COUNT(DISTINCT CASE WHEN ' + QUOTENAME(COLUMN_NAME) + ' IS NOT NULL THEN ' + QUOTENAME(COLUMN_NAME) + ' END) AS DistinctCount FROM Contacts UNION ALL ' 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'Contacts'

SET @sql = LEFT(@sql, LEN(@sql) - 10);
SET @sql = @sql + ' order by "DistinctCount"'

EXEC sp_executesql @sql;

Dankeschön,

dann wohl am besten immer Dokumentieren und dann schnell löschen, wenn man merkt, dass ein Feld nicht benötigt wird.