Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Объясните грамотно почему это не правильно. / 25 сообщений из 51, страница 1 из 3
03.07.2008, 13:50
    #35408812
Cheerful Calf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните грамотно почему это не правильно.
Кого не затруднит привести грамотные аргументы почему данная схема не правльная?
...
Рейтинг: 0 / 0
03.07.2008, 14:22
    #35408921
Naf
Naf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните грамотно почему это не правильно.
что это?
...
Рейтинг: 0 / 0
03.07.2008, 14:32
    #35408951
Алексей Р.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните грамотно почему это не правильно.
Предположу, что схема не реляционна, есть лишняя (избыточная) связь.
(Если я правильно понимаю "реляционность").
...
Рейтинг: 0 / 0
03.07.2008, 14:39
    #35408978
Cheerful Calf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните грамотно почему это не правильно.
Это схема
база проверок врачей (но в принципе это не важно), мне нужен аргумент почему это не правильно.
слева три таблицы , для произвольного количества различный атрибутов по объектам
1) справочник объектов (проверка квалификации, опоздания, жлобы больных). 2) справочник атрибутов (прошёл повышение квалификации, не опаздывает, правильно заполняет карточки) 3) связующий справочник - какие атрибуты какому объекту принадлежат. Справа сами проверки и результаты....
Тут упрощено, но сам подход ясен. Почему он не правильный? Пожалуйста заумные, грамотные фразы
...
Рейтинг: 0 / 0
03.07.2008, 17:18
    #35409682
nik_x
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните грамотно почему это не правильно.
Хм...
Повторю вопрос: ой, что это???

Что за нотация, почему не знаю?
IDEF1X (Традиционная) ? - нет
EER ? - нет
EER(1,n) ? - нет
Вороньи лапки ? - нет

Дык, что это?
...
Рейтинг: 0 / 0
03.07.2008, 17:24
    #35409701
Cheerful Calf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните грамотно почему это не правильно.
Ааа.. тогда это - сам подход, наброски так сказать, которые можно оформлять хоть в еер хоть в лапки. А что пока не оформлю правильно по какомунить стандарту, смысл никак не уловить? :)
...
Рейтинг: 0 / 0
03.07.2008, 17:41
    #35409745
nik_x
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните грамотно почему это не правильно.
Если напрячь рассудок, и представить, что сия стрелка - реляция 1 ко многим, то получается что-то вроде:

Зачем такая конструкция, многоие к очень многим?
...
Рейтинг: 0 / 0
03.07.2008, 17:45
    #35409756
Cheerful Calf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните грамотно почему это не правильно.
ах, так вы про стрелку.. да, да 1 ко многим.... Вы спрашиваете зачем, а спрашиваю чем это плохо.
...
Рейтинг: 0 / 0
03.07.2008, 17:49
    #35409779
Cheerful Calf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните грамотно почему это не правильно.
Только "кольцевая" связь замыкается на табла01 1:М табла04. Пятая не входит.
...
Рейтинг: 0 / 0
03.07.2008, 17:52
    #35409787
nik_x
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните грамотно почему это не правильно.
Cheerful Calfах, так вы про стрелку.. да, да 1 ко многим.... Вы спрашиваете зачем, а спрашиваю чем это плохо.

Я просто "на пальцах" или "сырмяжно" пытаюсь растолковать про нормальные формы...
...
Рейтинг: 0 / 0
03.07.2008, 17:55
    #35409795
Cheerful Calf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните грамотно почему это не правильно.
ах вы про НФ... А других аргументов (кроме того что классика это правильно, потому что она правильная) не будет?
...
Рейтинг: 0 / 0
03.07.2008, 18:03
    #35409840
nik_x
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните грамотно почему это не правильно.
Cheerful Calfах вы про НФ... А других аргументов (кроме того что классика это правильно, потому что она правильная) не будет?

Отчего-ж? Говорят англичане научились гланды через жопу вырезать:)
...
Рейтинг: 0 / 0
03.07.2008, 19:02
    #35409990
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните грамотно почему это не правильно.
nik_xЕсли напрячь рассудок, и представить, что сия стрелка - реляция 1 ко многим,

Реляция - это таблица. А что вы имеете в виду - ссылка. Foreign key.

С чего вы решили, что схема неправильная ? И к тому же надо знать постановку задачи, чтобы сказать, правильная она или нет. А мы ее не знаем. Никаких явных ляпов здесь вроде бы нет. Можно было бы иметь еще словарь проверяющих и проверяемых, лучше в одной таблице людей, возможно с ролями, поскольку наверняка проверяющих тоже проверяют, и они становятся проверяемыми, хотя точно это знаете только вы сами.
...
Рейтинг: 0 / 0
03.07.2008, 21:56
    #35410224
Чорный Бада
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните грамотно почему это не правильно.
Если я правильно понимаю тут что-то типа EAV.

По своему печальному опыту - EAV, это, пардон, гамно. Как правильно подобные суперабстрактные и, типа, универсальные модели возникают от (нужное подчеркнуть) нежелания/неумения/невозможности достаточно разобраться в предметной области и разумно определить скоуп проекта. Типа, отличная идея - слепить БД, в которую запихнуть можно всё что угодно. Слепить можно. Работать потом правда с ней нереально.
...
Рейтинг: 0 / 0
03.07.2008, 23:15
    #35410324
Формально
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните грамотно почему это не правильно.
возражений нет, работать будет. А по сути - говно, а не схема.
...
Рейтинг: 0 / 0
04.07.2008, 01:00
    #35410405
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните грамотно почему это не правильно.
Чорный БадаЕсли я правильно понимаю тут что-то типа EAV
Неправильно понимаете. Hint: попробуйте найти в нарисованном поля "тип значения атрибута", "значение атрибута"...

Безусловно, со временем может вырасти в EAV. Но пока к тому никаких продвижений не видно. Если бы вместо "атрибут" автор употребил слово "критерий", подозреваю, никто и не шелохнулся бы.
...
Рейтинг: 0 / 0
04.07.2008, 01:17
    #35410410
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните грамотно почему это не правильно.
Cheerful CalfКого не затруднит привести грамотные аргументы почему данная схема не правльная?
1. Главный недостаток - в "проверке" фактически теряется информация о проверяемом. "Имя проверяемого" - это не информация, это дерьмо. Проверяемые, как впрочем и проверяющие - это справочник. Который будет активно обрастать атрибутами и связями, например "какого человека какой проверке как часто подвергать".

2. Развязка "многие ко многим" между объектами и атрибутами лишняя. Обычное один ко многим будет куда уместнее. Кроме того, если ты будешь утверждать, что атрибуты различных проверок нередко совпадают, я скажу, что поле "частота проверок в месяц" становится совершенно бредовым.

3. Cхема не поддерживает целостность данных. Так, как нарисовано, "результат проверки" может ссылаться на атрибут объекта1 и проверку объекта2, что явно некорректно.

4. Сущности неудачно названы. Если взять случайного разработчика и сказать: "в схеме есть сущности "проверки" и "объекты проверок". как ты думаешь, в чем их смысл и чем они различаются", мало кто угадает придуманное Вами :) Я бы предложил, например, "Варианты проверок", "Проверяемые критерии", "Факты проверок", "Результаты проверок".

5. У факта проверки напрашивается поле со смыслом "статус". Сейчас, скажем, может быть так, что по какому-то атрибуту нет результата проверки, и непонятно - то ли это означает "нет без комментариев", то ли ошибку, то ли просто данные в процессе ввода.
...
Рейтинг: 0 / 0
04.07.2008, 01:25
    #35410412
Чорный Бада
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните грамотно почему это не правильно.
softwarerНеправильно понимаете. Hint: попробуйте найти в нарисованном поля "тип значения атрибута", "значение атрибута"...
Ну почему же. Для каждого обьекта проверки имеется несколько проверок. Каждая проверка заключается в проверке некоторого критерия на "да/нет". Атрибут - это проверяемый в проверке критерий. Его значение - "да" или "нет".
...
Рейтинг: 0 / 0
04.07.2008, 01:45
    #35410419
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните грамотно почему это не правильно.
Чорный БадаНу почему же.
Потому что сходство формальное, но не фактическое. Такими рассуждениями можно что угодно объявить EAV, например оценки, полученные студентами за экзамены (а что? экзамены - это справочник атрибутов; курсы - это классы; студенты - это объекты; оценки за экзамены - значения атрибутов).

Ключевое отличие EAV от "обычных схем" в том, что в одно поле укладываются разные с точки зрения бизнес-логики значения. В том, что в поле NUM_VALUE может лежать как "расстояние от Земли до Луны", так и "количество листов в тетради". Это не достаточное условие, но необходимое. В данной схеме это необходимое условие не выполняется (по крайней мере, нет признаков того, что выполняется). Критерии - это критерии и есть, справочник. Дальше - проверяющий ставит галочку и может быть пишет примечания, вот и вся бизнес-логика.
...
Рейтинг: 0 / 0
04.07.2008, 01:48
    #35410424
Чорный Бада
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните грамотно почему это не правильно.
softwarerКлючевое отличие EAV от "обычных схем" в том, что в одно поле укладываются разные с точки зрения бизнес-логики значения. В том, что в поле NUM_VALUE может лежать как "расстояние от Земли до Луны", так и "количество листов в тетради".
Тут я полностью согласен. И вот тогда наступает ЖОПА
...
Рейтинг: 0 / 0
04.07.2008, 01:49
    #35410426
Чорный Бада
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните грамотно почему это не правильно.
В первом приближении у меня получилось бы что-то вроде этого:
...
Рейтинг: 0 / 0
04.07.2008, 02:11
    #35410435
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните грамотно почему это не правильно.
Чорный БадаВ первом приближении у меня получилось бы что-то вроде этого:
В первом приближении у меня получилось бы что-то вроде этого:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
SQL> create table CheckCase (CheckCaseID integer not null primary key);

Table created

SQL> create table CheckMeasure (
   2     CheckMeasureID integer not null primary key,
   3     CheckCaseID integer not null references CheckCase (CheckCaseID),
   4     MeasureName varchar2( 100 ) not null,
   5     Description clob);

Table created

SQL> alter table CheckMeasure add unique (CheckMeasureID, CheckCaseID);

Table altered

SQL> create table Person (
   2     PersonID integer not null primary key,
   3     PersonName varchar2( 100 ) not null unique);

Table created

SQL> create table CheckEvent (
   2     CheckEventID integer not null primary key,
   3     CheckCaseID integer not null references CheckCase (CheckCaseID),
   4     PersonID_Checked integer not null references Person (PersonID),
   5     EventDate date not null,
   6     Description clob);

Table created

SQL> alter table CheckEvent add unique (CheckEventID, CheckCaseID);

Table altered

SQL> create table CheckResult (
   2     CheckResultID integer not null primary key,
   3     CheckCaseID integer not null,
   4     CheckEventID integer not null,
   5     CheckMeasureID integer not null,
   6     PersonID_Checking integer not null references Person (PersonID),
   7     Score char( 1 ) not null check (Score in ('Y', 'N')),
   8     Notes clob);

Table created

SQL> alter table CheckResult add foreign key (CheckMeasureID, CheckCaseID)
   2     references CheckMeasure (CheckMeasureID, CheckCaseID);

Table altered

SQL> alter table CheckResult add foreign key (CheckEventID, CheckCaseID)
   2     references CheckEvent (CheckEventID, CheckCaseID);

Table altered
...
Рейтинг: 0 / 0
04.07.2008, 02:56
    #35410448
Чорный Бада
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните грамотно почему это не правильно.
softwarerВ первом приближении у меня получилось бы что-то вроде этого

1) Не очень понятно назначение таблицы CheckCase.

2) вот это ещё мне не очень:
Код: plaintext
1.
2.
create table CheckMeasure (
    CheckMeasureID integer not null primary key,
    CheckCaseID integer not null references CheckCase (CheckCaseID),
и одновременно тут же
Код: plaintext
alter table CheckMeasure add unique (CheckMeasureID, CheckCaseID);
Если тут имеется в виду идентифицирующая связка, то не разумней ли сразу первичным ключом сделать (CheckCaseID, CheckMeasureID)?
...
Рейтинг: 0 / 0
04.07.2008, 03:47
    #35410456
Объясните грамотно почему это не правильно.
2 softwarer +0.75 с уточнениями

П1 - Указанный вами пункт 1 не является главным недостатком предложенной схемы.
Т.к. в схеме просто нет сущностей «проверяющий» и «проверяемый» и нет ясного понимания причины их отсутствия, то нет и оснований для выставления этого момента на первое место. Такое его творческое видение предмета, что «проверяемые» с «проверяющими» вовсе не сущности, а просто атрибуты. Составит это проблему для его задачи или нет – предмет правдоподобного, но домысливания.
К недостаткам предложенной схемы это относимо с натяжкой.
Тем более, что превращение их в сущности не составляет формальной проблемы в предложенной схеме.

П2 про излишество N-N – по существу – почти наверно - да.
N-N может оказаться практически неприемлемым при переименовании атрибутов. Но может и не оказаться.

П3. В предложенной схеме это главный недостаток.
Может быть компенсирован
- либо организацией интерфейса пользователя ( не гарантирует от ошибок программиста и администратора БД)
- либо организацией нетривиальных условий проверки целостности c использованием check constraint (если выбранная субд сможет их поддержать) или триггеров ( с тем же условием.).

Либо изменением характера связей между сущностями и перепроектированием сущности [Результаты_проверки].

Так, если изменить связи между [Объекты_проверок] и [Проверки]
И между [Объекты_проверок] и [Справочник_атрибутов_по_объектам]
С неидентифицирующих на идентифицирующие, то использованные в схеме сущности
более-менее естественным образом можно представить так;


[Объекты_Проверок](АйДи, прочие_атрибуты)
PK(АйДи)

[Справочник_Атрибутов](PK,АйДи, прочие_атрибуты)
PK(PK,АйДи)
FK(АйДи) REFERENCES [Объекты_Проверок](АйДи)

[Проверки](PK,АйДи, прочие_атрибуты)
PK(PK,АйДи)
FK(АйДи) REFERENCES [Объекты_Проверок] (АйДи)


[Результаты_проверок](PK,PK_П,АйДи,PK_А, прочие_атрибуты)
PK(PK,PK_П,АйДи)
FK(PK_П,АйДи) REFERENCES [Проверки](PK,АйДи)
FK(PK_А,АйДи) REFERENCES [Справочник_Атрибутов](PK,АйДи)

Использованный переход с идентифицирующим зависимостям позволит явно указать дерево зависимости сущностей - [Справочник_Атрибутов] оказывается явным образом ведомым для сущности [Объекты_Проверок], а [Результаты_проверок] явным образом ведомая для сущности [Проверки]. Дополнительно, такой вариант оформления сущности
[Результаты_проверки] автоматически не даст возможности допустить ошибку связывания строки проверки с атрибутом чужого проверяемого объекта без использования как heck constraint, так и триггеров.
П3 – ключевой в рамках предложенной схемы (если принять характер связей как адекватный предметной области – независимо от справедливости такого принятия, то проблема именно в сущности [Результаты_проверки]).


П4 – вопрос вкуса/стиля

П5 – домысливание задачи за пределы предложенной для выявления недостатков схемы.
...
Рейтинг: 0 / 0
04.07.2008, 10:21
    #35410802
Cheerful Calf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните грамотно почему это не правильно.
2 Чорный Бада
Это не Тенцер. Им тут и не пахнет. Хотя на первый взгляд сходство с неким подобием модели еав есть.

2 softwarer | сосед. был акцессник. теперь неи

1) Cущность «проверяющий» возможно будет, в данной схеме её не составит труда добавить. Но пока она не на первом месте, это скорее действительно атрибут проверки. В общих чертах, чтобы удовлетворить главное требование заказчика (а это гос. учереждение) - то сущность может быть вообще всего одна - Проверка. Всё остальное пофигу. Главное - была ли проверка, что проверили и соответсвовало ли это некоим подтверждённым требованиям... (утрированно)

2) Ага. Спасибо, доктор, пожалуй именно это меня и беспокоило... Связи М:М тут действительно надо переделывать.

3) Целостностью данных приходиться жертвовать, иначе для каждой проверки (чистоты ёршика в туалете, карточки больного, наличие необходимых лекарств в запасе...) придёться делать отдельную таблицу. Некую поддержку обеспечит сама база (фиребёрд), некую клиент (делфи). В любом случае этот пункт тоже подлежит серьёзной доработке. Опять спасибо.

4) Наименования из картинки (типа АйДи русскими буквами) в базе не будет :)

5) "может быть так, что по какому-то атрибуту нет результата проверки" - исключено
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Объясните грамотно почему это не правильно. / 25 сообщений из 51, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]