Здравствуйте. Так уж получилось, что за лето необходимо написать небольшую информационную систему для хранения документации, сокращенно аскид. Встал вопрос об организации структуры БД.
Немного о задаче. Имеются различные типы документов. К примеру: Локальные акты, Справки, приказы и т.д. . Для каждого документа существует свой набор полей: name, path(путь до файла на диске), date и т.д. . Предполагается, что некоторые поля которые содержаться во всех документах будут общими, например поля name и path содержаться во всех документах. Встаёт вопрос: как организовать структуру БД? Если можно изобразите схематично.
Не заморачивайтесь на тему общих полей. Храните документы как целостные документы. Т.е. в приказах - приказы, в справках - справки и т.д. со своими полем name и path. Тем более, что на диске это придется организовывать что-то типа /documents/orders/2015/aug/05/N335.doc
Почему так? Если навернется база, чтобы человек мог найти нужный ему документ интуитивно.
И потом организовать поиск будет гораздо удобнее и составить к нему интерфейс.
Расскажите пожалуйста, какую еще вам нужно информацию хранить о документах. То, что вы сейчас перечислили, сохранит любая файловая система, ну или на крайняк, система контроля версий. И это решение будет лучше, чем с базой, т.к. не будет избыточности (значит, не будет рассинхронизации). Может вам поиск нужен по атрибутам или по тексту? Тогда это другая история.
Ой плохой из меня пеинт мастер, но вот )) как-то так думаю, если что упустил, критикуйте, попробуем доработать :) ipic.su/img/img7/fs/Bezymyannyj.1438725172.png
Суть такова, что все поля, которые должны быть общими, ты выносишь в другую таблицу и связываешь ее через foreign keys.
Therapyx Не знаю, каких аномалий вы сможете избежать, если их будет три, но новые аномалии точно появятся: что мне мешает во все три поля проставить ID? Поля-то взаимоисключающие. Вам по сути нужно делать вывод о типе документа из того, в какой таблице из дочерних вы этот Id нашли. Ну или чтобы не искать, можно в родительской поле type сделать.