Мое программное обеспечение начало работать несколько дней назад, и теперь я хочу немного поспорить о структуре базы данных.
Программное обеспечение собирает данные о кораблях, в настоящее время 174 детали для каждого корабля, каждая деталь может быть текстовым значением, длинным текстовым значением, числом (определенной длины, с указанным количеством десятичных знаков или без него), датой , дата со временем, логическое поле, меню со многими значениями, список данных и многое другое.
Я решил проблему с помощью следующих таблиц
Ship:
- ID - smallint, Autoincrement identity
- IMO - int, A number that does not change for the life of the ship
ShipDetailType:
- ID - smallint, Autoincrement identity
- Description - nvarchar(200), The description of the value the field contains
- Position - smallint, The position of the field in the data input form
- ShipDetailGroup_ID - smallint, A key to the group the field belongs to in the data input form
- Type - varchar(4), The type of the field as mentioned above
ShipDetailGroup
- ID - smallint, Autoincrement identity
(snip...)
ShipMenuPresetValue
- ID - smallint, Autoincrement identity
- ShipDetailType_ID - smallint, A key to the detail the values belongs to
- Value - nvarchar(100), The values preset in the menu type detail
ShipTextDetail
- ID - smallint, Autoincrement identity
- Ship_ID - smallint, A Key to the ship the detail belongs to
- ShipDetailType_ID - smallint, a Key to the detail type of the value
- Text - nvarchar(500), the field containing the detail's value
- ModifiedDate - smalldatetime
- User_ID - smallint, A key to the user table
ShipTextDetailHistory
(snip...)
This table is the same as the ShipTextDetail and contains every change to the details.
Other tables for the list detail type, each with the specified fields required for the list, ...
Я только что прочитал эту статью: http://thedailywtf.com/Articles/The_Inner-Platform_Effect.aspx и http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:10678084117056
В статьях говорится, что это неправильный способ решения проблемы.
У моего клиента есть интерфейс управления для деталей и групп, так как он меняет описания деталей и добавляет дополнительные детали.
Форма ввода данных динамически создается путем чтения структуры из DetailGroups и DetailTypes, каждый тип детализации генерирует указанный элемент управления вводом.
В комментариях предполагается, что другим способом решения этой проблемы является динамическое создание и удаление столбцов из таблицы.
Что вы думаете?
Снимок экрана: http://img24.imageshack.us/my.php?image=66604496uk3.png