Как наиболее правильно построить логику таблиц

intelligent

Новичок
Как наиболее правильно построить логику таблиц

Добрый день!

Есть такая задача - нужно создать БД проектов, наименшая единица это проект, он в свою очередь может относиться к нескольким отраслям (металлургия, химия и проч.) и какому либо клиенту (а может быть и без клиента, и относиться просто к отрасли)

Есть два варианта:

------1------
3 таблицы
projects (id, category_ids, client_id, name, text)
categories (id, title)
clients (id, name, info)

где category_ids это перечисление id категорий, скажем через запятую

этот вариант не нравиться так могут быть проблемы при поиске, а также это вообще противоречит РБД.

------2------
4 таблицы
projects (id, name, text)
categories (id, title)
clients (id, name, info)
main (project_id, category_id, client_id)

но и здесь также будет незначительная избыточность (в таблице main)


есть какие либо еще варианты ?
 

ForJest

- свежая кровь
projects (id, name, text)
categories (id, title)
clients (id, name, info)
lnk_project_category (project_id, category_id)
lnk_project_client (project_id, client_id)
 

Wicked

Новичок
projects (id, name, text, client_fk)
categories (id, title)
clients (id, name, info)
lnk_project_category (project_fk, category_fk)
 

ForJest

- свежая кровь
У прокта к клиенту необязательная связь, поэтому нельзя поле вносить в таблицу projects, или в случает отсутсвия клиента поле нужно будет держать null]
 
Сверху