Я имею предлагаемую структуру таблицы, чтобы расширить базу данных:SQL - нормализация базы данных
в пределах OrganisationalAssets
таблицы. Следующие столбцы обнуляемые:
- Organisation_Id
- LOCATION_ID
- LANGUAGE_ID
Проблемы мы столкнулись в том, что Organisation_Id
колонна обнуляемая только для определенных видов активов. Некоторые активы относятся к Организации, а некоторые никогда не будут. Для тех, которые относятся к Организации, применяются другие столбцы, местоположение и язык. Если Организация NULL. Тогда Язык и Местоположение являются избыточными столбцами для этих активов.
Мне кажется, что у меня есть таблица, в которой неправильно хранятся два типа активов. Внутренние и внешние активы. Внутренние не ограничены Организацией, языком и местоположением, в то время как внешние активы.
Однако я не совсем уверен, как изменить структуру, чтобы отразить это. Независимо от того, являются ли они внутренними или внешними активами, у них все еще может быть много связанных с ними AssetSettings. Внешние активы будут иметь другой набор AssetSettings, зависящий от там Organization, Location_Id и Language_Id, тогда как внутренний актив не будет. У них будет только один набор настроек.
Я не уверен в том, чтобы:
- Просто оставьте структуру, как это происходит потому, что она работает. Хотя это не нормируется правильно.
- Попытка и реструктуризация таблиц, позволяющих использовать оба типа активов, и если да, то каким образом.
Выборочные данные Вот некоторые примеры данных, мы надеемся сделать немного больше смысла того, что я спрашиваю:
OrganisationAssets
+----+----------+-----------------+-------------+-------------+
| Id | Asset_Id | Organisation_Id | Location_Id | Language_Id |
+----+----------+-----------------+-------------+-------------+
| 1 | 1 | 2 | 3 | 4 |
| 2 | 1 | 2 | 3 | 999 |
| 3 | 2 | NULL | NULL | NULL |
+----+----------+-----------------+-------------+-------------+
Первые два ряда для AssetId 1. Он относится к двум различным местоположениям и является Внешним актив. Третий ряд - Внутренний актив, поэтому другие столбцы являются избыточными.
AssetSettings
+----+------------------------+------+--------+
| Id | OrganisationalAsset_Id | Key | Value |
+----+------------------------+------+--------+
| 1 | 1 | Key1 | Value1 |
| 2 | 1 | Key1 | Value1 |
| 3 | 2 | KeyA | ValueA |
| 4 | 3 | KeyB | ValueB |
+----+------------------------+------+--------+
В таблице AssetSettings. Мы можем увидеть два набора параметров для Asset с Id1 (т. Е. OrganisationalAsset_Id 1 и 2). Мы также можем увидеть второй актив, отображаемый в таблице, и он может иметь только одну группу настроек, поскольку он не принадлежит ни к какой организации, местоположению или языку.
Одна рекомендация, которую я хотел бы сделать, - это прекратить использовать ID в качестве имени столбца в любой таблице. Если это OrganizationID, то это должно быть в каждой таблице. Идентификатор слишком неоднозначен imho, а столбец, который изменяет имена между таблицами, просто ужасен для работы. –