Задачка на проектирование БД с интересным ответом
Правила форума
Пожалуйста, ознакомьтесь с правилами данного форума
Пожалуйста, ознакомьтесь с правилами данного форума
- Дима
- Маньяк
- Сообщения: 1455
- Зарегистрирован: 15 авг 2006, 10:21
- Откуда: Минск->Vancouver->Victoria
Задачка на проектирование БД с интересным ответом
У вас есть табличка каких-то процессов. Каждым процессом владеет либо user, либо group. Юзеры и группы связаны между собой соотношением много-ко-многим и являются разными обьектами с сильно разным набором свойств. Какой дизайн этого кусочка БД будет самым идеологически выдержанным, по вашему мнению ?
- aldep
- Маньяк
- Сообщения: 1593
- Зарегистрирован: 18 фев 2003, 08:06
- Откуда: Toronto
- Контактная информация:
- aissp
- Маньяк
- Сообщения: 2710
- Зарегистрирован: 07 ноя 2005, 09:51
- Дима
- Маньяк
- Сообщения: 1455
- Зарегистрирован: 15 авг 2006, 10:21
- Откуда: Минск->Vancouver->Victoria
Я так и знал, что в каморке сидят идеологически выдержанные дизайнеры БД
С точки зрения идеологии грамотно будет создать суперкласс "Владелец процесса", от которого некоторые свойства будут наследовать как юзеры, так и группы. Реализация зависит от конкретной БД; в частности, какие-то об'екты можно хранить во VIEW.
Как часто вы видели идеологически выдержанные базы данных ?
(рассматриваю таблицу процессов, в которой лежит поле "тип владельца" и "id", которое ссылается либо на юзера, либо на группу в зависимости от значения поля "тип владельца")...

Как часто вы видели идеологически выдержанные базы данных ?

-
- Маньяк
- Сообщения: 2841
- Зарегистрирован: 20 фев 2003, 09:15
- Откуда: Vancouver
Я идеологически невыдержан. В лоб - я создам четыре таблицы - юзеры, группы, процессы и их взаимотношения между собой. Ежели в одной четвертой таблице взаимоотношения между тремя сущностями не представляются - то мона наплодить больше таблиц. Главное в логике не запутаться.
Ежели это не нравится - придется заняться сисемным анализом и строить там иерарихии - от юзеров к группам ну и прочая хрень.
А вообще не важно что там выдержано а что нет. Важно - как ты могешь оппонентов которые грят что твой дизайн - фуфло отфутболивать.
Ежели это не нравится - придется заняться сисемным анализом и строить там иерарихии - от юзеров к группам ну и прочая хрень.
А вообще не важно что там выдержано а что нет. Важно - как ты могешь оппонентов которые грят что твой дизайн - фуфло отфутболивать.
- папа Карло
- Шарманщик
- Сообщения: 8565
- Зарегистрирован: 17 фев 2003, 15:04
- Откуда: НН -> BC -> WA -> UT -> CA
- Marmot
- Графоман
- Сообщения: 39279
- Зарегистрирован: 17 фев 2003, 17:58
- Откуда: Caulfeild
- Контактная информация:
-
- Завсегдатай
- Сообщения: 301
- Зарегистрирован: 04 май 2005, 11:33
- папа Карло
- Шарманщик
- Сообщения: 8565
- Зарегистрирован: 17 фев 2003, 15:04
- Откуда: НН -> BC -> WA -> UT -> CA
- папа Карло
- Шарманщик
- Сообщения: 8565
- Зарегистрирован: 17 фев 2003, 15:04
- Откуда: НН -> BC -> WA -> UT -> CA
управление через группы логичнее, абсолютно согласен, анлесс есть какие либо интересные требования почему так не может ьыть сделано.Marmot писал(а):А я бы сделал так что бы владеть процессом могли только группы.
Не вижу ничего неправильного в том что в группе может быть один юзер.
Зато всё будет логично и прямолинейно...
-
- Завсегдатай
- Сообщения: 301
- Зарегистрирован: 04 май 2005, 11:33
- Дима
- Маньяк
- Сообщения: 1455
- Зарегистрирован: 15 авг 2006, 10:21
- Откуда: Минск->Vancouver->Victoria
Ууу, докопались такипапа Карло писал(а):управление через группы логичнее, абсолютно согласен, анлесс есть какие либо интересные требования почему так не может ьыть сделано.Marmot писал(а):А я бы сделал так что бы владеть процессом могли только группы.
Не вижу ничего неправильного в том что в группе может быть один юзер.
Зато всё будет логично и прямолинейно...

- aldep
- Маньяк
- Сообщения: 1593
- Зарегистрирован: 18 фев 2003, 08:06
- Откуда: Toronto
- Контактная информация:
-
- Завсегдатай
- Сообщения: 301
- Зарегистрирован: 04 май 2005, 11:33
You mean extra roundtrip to the DB from the application? How about this?aldep писал(а):Потому что тогда одним запросом не нельзя соединить таблицы процесса и владельца.StS писал(а):Why?папа Карло писал(а): that's a bad design.
CREATE TABLE process
(
ID INTEGER NOT NULL,
ProcessName VARCHAR(30) NOT NULL,
UserID INTEGER,
GroupID INTEGER,
);
CREATE TABLE user
(
ID INTEGER NOT NULL,
name VARCHAR(30) NOT NULL,
);
CREATE TABLE group
(
ID INTEGER NOT NULL,
name VARCHAR(30) NOT NULL,
);
SELECT group.name as name
FROM processowner
INNER JOIN group ON processowner.groupid=group.id
WHERE processowner.id=processID AND processowner.groupid is not null
UNION
SELECT user.name as name
FROM processowner
WHERE processowner.id=processID AND processowner.userid is not null
-
- Маньяк
- Сообщения: 2841
- Зарегистрирован: 20 фев 2003, 09:15
- Откуда: Vancouver
Хе-хе. Ежели б знать какие запросы требуются в момент проектирования... Даже ежели все знают через год после ввода так сказать в эксплуатацию вдруг требуется 10 совершенно новых запросов. Вообще канонически модель данных проектируют как отражение бизнес процессов а не чтоб запросы проще писать. Производительность запросов могет правда да страдать зато на апдейт должно все путем быть и гораздо лучше когда какие нить запросы не очень эффективны чем вся модель данных не отражает бизнес процесс и тыда все, боржом пить будети поздно.aldep писал(а):Все зависит конечно от требуемых запросов в большой степени,
Впрочем, амбары данных проектируют как раз наоборот - чтоб запросы быстрее были.