|
|
|
Несколько вопросов
|
|||
|---|---|---|---|
|
#18+
Всем добрый вечер! Допустим, стоит задача . Есть три таблицы: Дома (условно назовём H ), Квартиры ( F ) и Счётчики ( M ). Дома могут быть как многоквартирными, так и частными. Счётчики могут быть как на отдельную квартиру, так и на весь дом (и частный, и многоквартирный). Вопрос : Каким образом лучше организовать связи между данными тремя таблицами? У меня пока созрели два способа: 1. Сквозной искусственный ключ для домов и квартир. 2. Два внешних ключа в таблице Счётчиков M – на дом и на квартиру. Вероятно, с ограничением типа (на XOR не обращайте внимания, это концепт) Код: plsql 1. P.S. И ещё несколько мелких вопросов по проектированию БД в общем: 1. Как лучше поступать с простыми естественными ключами (такими как серия+номер паспорта, ИНН, ЕГРПОУ и пр.): делать их первичными, или создавать искусственные, а на ЕК вешать уникальность? 2. Если в некотором столбце типа даты имеют значение только месяц и год (мало ли, точность до числа не нужна), есть ли смысл разделать его на MONTH и YEAR, или лучше повесить ограничение типа Код: plsql 1. (или иное условное число)? 3. В каком типе лучше хранить МФО, ЕГРПОУ, ИНН и прочие числовые ЕК: целочисленном или строковом? И почему? 4. Есть ли смысл создавать отдельные поля для фамилии, имени и отчества? Для серии и номера паспорта? Для кода города и собственно номера телефона? P.P.S. Все ответы просьба давать под Oracle 12c и Firebird 3.0, причём желательно отдельно, если они различаются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2016, 23:02 |
|
||
|
Несколько вопросов
|
|||
|---|---|---|---|
|
#18+
MegadragonЕсть три таблицы: Дома (условно назовём H), Квартиры (F) "Уже смешно." (с) У тебя ещё задача не стоит, а таблицы уже есть. Телега впереди лошади. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2016, 23:17 |
|
||
|
Несколько вопросов
|
|||
|---|---|---|---|
|
#18+
Megadragon, Так, бегло, задачи действительно не видно, даже из далека... Megadragon Вопрос : Каким образом лучше организовать связи между данными тремя таблицами? Дом -> Квартира -> Счетчик - У всех трёх таблиц ключи - естественные счетчики (ID) с авто нумерацией - Все связи один ко многим (у квартиры есть ID дома, у счетчика есть ID квартиры) - У счетчика есть ещё уникальный серийник счетчика для директ поиска. - Если дом частный или всего один счетчик на многоэтажный дом, то квартира в этом доме всего одна и её номер НОЛЬ. Megadragon1. Как лучше поступать с простыми естественными ключами (такими как серия+номер паспорта, ИНН, ЕГРПОУ и пр.): Это не ключи, это простые текстовые характеристики, которые можно проиндексировать для быстрого поиска, не ключи потому, что за владельцем одного паспорта может числиться несколько квартир и т.д. Megadragon3. В каком типе лучше хранить МФО, ЕГРПОУ, ИНН и прочие числовые ЕК: целочисленном или строковом? И почему? Строковом - строка, она и в африке строка (нули не пропадут ни с лева ни с права, тире тоже не редкость) - искажается только при принудительном преобразовании Megadragon4. Есть ли смысл создавать отдельные поля для фамилии, имени и отчества? Для серии и номера паспорта? Для кода города и собственно номера телефона? Есть, всегда проще собрать чем если приспичит - разделять ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2016, 00:03 |
|
||
|
Несколько вопросов
|
|||
|---|---|---|---|
|
#18+
MegadragonДопустим, стоит задача . Есть три таблицы: Дома (условно назовём H ), Квартиры ( F ) и Счётчики ( M ). Дома могут быть как многоквартирными, так и частными. Счётчики могут быть как на отдельную квартиру, так и на весь дом (и частный, и многоквартирный). Добрый день. Допустим, надо начинать с других сущностей, например, абоненты (физ/юрлица/ТСЖ), индивидуальные приборы учета, общедомовые счетчики, показания приборов в динамике, платежи и т.д. Взаимоотношения ресурсоснабжающей организации выстраиваются с абонентами, а не с домами/квартирами, т.е. адресная информация в данном случае атрибут сущности "Абонент". Или атрибут "Адрес установки" сущности "Общедомовой прибор учета". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2016, 04:42 |
|
||
|
Несколько вопросов
|
|||
|---|---|---|---|
|
#18+
ymagЕсли дом частный или всего один счетчик на многоэтажный дом, то квартира в этом доме всего одна и её номер НОЛЬ. Именно 0 как число? NULL не прокатит? Всё равно ведь сам по себе номер квартиры не м.б. ключом. И нельзя ли обойтись без создания таких квартир-пустышек? ymagне ключи потому, что за владельцем одного паспорта может числиться несколько квартир По-моему, словосочетание по проектированию в общем в постскриптуме должно было дать понять, что следующие вопросы уже не являются частью ТЗ. М-да... Хотел не плодить темы, задав все интересующие вопросы в одной, а получилось, что все вопросы привязали к одной задаче. vmagСтроковом - строка, она и в Африке строка (нули не пропадут ни с лева ни с права, тире тоже не редкость) - искажается только при принудительном преобразовании А если точно известно, что кроме цифр в таких полях ничего не будет? Всё равно лучше строка с regexp-based ограничением, чем integer? AnSi_SrДопустим, надо начинать с других сущностей, например, абоненты (физ/юрлица/ТСЖ), индивидуальные приборы учета, общедомовые счетчики, показания приборов в динамике, платежи и т.д. Взаимоотношения ресурсоснабжающей организации выстраиваются с абонентами, а не с домами/квартирами, т.е. адресная информация в данном случае атрибут сущности "Абонент". Или атрибут "Адрес установки" сущности "Общедомовой прибор учета". Уж простите, сильно я абстрагировался. Естественно, куда же без таблиц организаций, абонентов, платежей и прочих необходимых... P.S. Первый блин (в смысле тема) комом, сами понимаете... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2016, 07:47 |
|
||
|
Несколько вопросов
|
|||
|---|---|---|---|
|
#18+
MegadragonИменно 0 как число? NULL не прокатит? Всё равно ведь сам по себе номер квартиры не м.б. ключом. И нельзя ли обойтись без создания таких квартир-пустышек? NULL прокатит, и можно обойтись без пустышек, если в сущности квартира, кроме её номера больше ничего не хранить (тупиковая ветка, количество жильцов, статус приватизации и т.д. не важны) Общая задача ведь по прежнему так и не ясна... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2016, 09:16 |
|
||
|
Несколько вопросов
|
|||
|---|---|---|---|
|
#18+
Megadragon, Со счетчиками и квартирами - не надо пытаться упрощать. Надо честно смоделировать десяток таблиц "что-то относится к чему-то". Как уже правильно сказали, расчет идет не с домами и квартирами, а с абонентами. Разницу легко увидеть, если представить себе коммунальную квартиру - счетчик один, а абонентов за ним несколько, и каждый хочет отдельный счет. Далее, если счетчик общедомовой, то нужно помнить, что в этом же доме могут быть индивидуальные счетчики, показания которых придется вычитать из общедомового. Казалось бы, что сложного? Но если кто-то, кто живет в доме с общим счетчиком, поставит себе индивидуальный счетчик в середине месяца? То есть все эти взаимосвязи нужно разворачивать во времени. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2016, 10:51 |
|
||
|
Несколько вопросов
|
|||
|---|---|---|---|
|
#18+
Megadragon1. Как лучше поступать с простыми естественными ключами (такими как серия+номер паспорта, ИНН, ЕГРПОУ и пр.): делать их первичными, или создавать искусственные, а на ЕК вешать уникальность? Первичными - ни в коем случае. Уникальность - разбираться с каждым. Например, у тебя реестр абонентов, и в нем поле ИНН. Напрашивается желание сделать ИНН уникальным. Но что ты будешь делать, если у одного человека в собственности две квартиры в разных домах? Абонентских счета два, а ИНН один и тот же. Надо либо идти до конца в нормализации, и разделять сущности физлица и абонента, со связью один-ко-многим (что, конечно, правильнее, но так мало кто делает), или плюнуть на неуникальность ИНН. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2016, 10:59 |
|
||
|
Несколько вопросов
|
|||
|---|---|---|---|
|
#18+
MegadragonЕсли в некотором столбце типа даты имеют значение только месяц и год (мало ли, точность до числа не нужна), есть ли смысл разделать его на MONTH и YEAR Если у тебя есть поля MONTH и YEAR, представь, что тебе нужно сделать выборку "С сентября 2010 по февраль 2012 включительно". Напиши WHERE-условие выборки. Создай индекс для оптимизации этой выборки. А потом сделай то же для поля DATE, сравни сложность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2016, 11:06 |
|
||
|
Несколько вопросов
|
|||
|---|---|---|---|
|
#18+
Megadragon3. В каком типе лучше хранить МФО, ЕГРПОУ, ИНН и прочие числовые ЕК: целочисленном или строковом? И почему? МФО и ЕГРПОУ можно в цифровом, проблем не было, а вот с ИНН засада: если человек по религиозным соображениям не получил ИНН, то вместо него используется серия и номер паспорта. Многие для простоты делают ИНН строковым и в этом случае сажают туда данные паспорта. Некоторые добавляют поле-галку "ИНН не получен по религиозным соображениям", и по нему достают данные из полей паспорта. Как больше нравится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2016, 11:10 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=39295931&tid=1540292]: |
0ms |
get settings: |
12ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
156ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 236ms |
| total: | 492ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...