Я пытаюсь создать небольшую базу данных для клиента. У моего клиента есть организация, которая работает с государственными и частными школами; для каждой участвующей школы есть реализация (глава) в каждой школе.
Чтобы создать это, я собрал две таблицы; один для школ и один для глав. Однако я не уверен, что мне следует объединить их вместе. Таблицы следующие:
mysql> describe chapters;
+--------------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| school_id | int(10) unsigned | NO | MUL | | |
| is_active | tinyint(1) | NO | | 1 | |
| registration_date | date | YES | | NULL | |
| state_registration | varchar(10) | YES | | NULL | |
| renewal_date | date | YES | | NULL | |
| population | int(10) unsigned | YES | | NULL | |
+--------------------+------------------+------+-----+---------+----------------+
7 rows in set (0.01 sec)
mysql> describe schools;
+----------------------+------------------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------------+------------------------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| full_name | varchar(255) | NO | MUL | | |
| classification | enum('high','middle','elementary') | NO | | | |
| address | varchar(255) | NO | | | |
| city | varchar(40) | NO | | | |
| state | char(2) | NO | | | |
| zip | int(5) unsigned | NO | | | |
| principal_first_name | varchar(20) | YES | | NULL | |
| principal_last_name | varchar(20) | YES | | NULL | |
| principal_email | varchar(20) | YES | | NULL | |
| website | varchar(20) | YES | | NULL | |
| population | int(10) unsigned | YES | | NULL | |
+----------------------+------------------------------------+------+-----+---------+----------------+
12 rows in set (0.01 sec)
(Обратите внимание, что эти таблицы неполные - я еще не реализовал внешние ключи. Также, пожалуйста, игнорируйте размеры varchar для некоторых полей, они будут изменяться.)
До сих пор плюсы их разделения:
- Отдельные запросы школ и
главы легче. Я не знаю, если
это необходимо на данный момент, но
это приятно делать.
- Я могу сделать главу неактивной
без непосредственного влияния на
информация о школе.
- Общее разделение данных - поля в
«главы» имеют прямое отношение к
сама глава, а не школа
в котором оно существует. (Мне нравится
организация - это имеет больше смысла
мне. Также следует мантре «ничего, кроме ключа».)
- Если возможно, мы можем собрать школу
данные без главы
связано с этим, что может сделать
смысл, если мы в конечном итоге хотим людей
выбрать школу и заселить
данные.
И минусы:
- Отдельные идентификаторы для школ и
главы. Насколько я знаю, там
будет когда-либо только один к одному
отношения между двумя, так
делать это может ввести больше
сложность, которая может привести к ошибкам
вниз по линии (например, импорт данных
из таблицы, которая, к сожалению,
что-то, что я буду делать много).
- Если соотношение один к одному, и
идентификаторы - это поля auto_increment,
Я предполагаю, что chapter_id и
school_id в конечном итоге будет таким же - так почему бы просто не поместить их в одну таблицу?
- Из того, что я понимаю, главы
на самом деле не опознаются на их
собственные - они связаны со школой, и
как таковой должен быть подмножество
школа. Должны ли они действительно быть
отдельные объекты в таблице?
Прямо сейчас я склоняюсь к тому, чтобы хранить их как два отдельных стола; кажется, что плюсы перевешивают минусы, но я хочу убедиться, что я не создаю ситуацию, которая может вызвать проблемы в будущем. Я связался со своим клиентом и пытаюсь получить более подробную информацию о данных, которые они хранят, и о том, что они хотят с ними делать, что, я думаю, действительно поможет. Тем не менее, я хотел бы получить мнение от хорошо информированных людей здесь; Есть ли что-нибудь, о чем я не думал? Суть в том, что я хочу все сделать правильно с первого раза.