Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Структура базы данных
 
 автор: Mookapek   (28.07.2009 в 23:19)   письмо автору
 
 

Допустим, есть объект со свойствами "1", "2", "3". Другой объект имеет свойства "1", "3", "4". Третий объект имеет свойства "1","2", "4", "5". Так вот вопрос, как правильно с точки зрения оптимизации составить базу данных этих объектов? Сколько должно быть в данном случае таблиц. Ведь объекты имеют как сходные свойства, так и разные.

  Ответить  
 
 автор: Trianon   (28.07.2009 в 23:44)   письмо автору
 
   для: Mookapek   (28.07.2009 в 23:19)
 

три
таблица объектов, таблица свойств, таблица наличия свойства у объекта

  Ответить  
 
 автор: Mookapek   (29.07.2009 в 00:12)   письмо автору
 
   для: Trianon   (28.07.2009 в 23:44)
 

Хм... если у меня есть три объекта - квартира, коттедж, земельный участок. Для квартиры заполняются поля "Адрес", "Цена", "Кол. комнат",. Для коттеджа - "Адрес", "Цена", "Кол. комнат", "Площадь участка". Для земельного участка - "Адрес", "Цена", "Площадь участка". То есть одна таблица должна содержать поля "Квартира", "Коттедж", "Земельный участок", вторая - "Адрес", "Цена", "Кол. комнат", "Площадь участка". На счет третьей я не понял.

  Ответить  
 
 автор: Trianon   (29.07.2009 в 00:42)   письмо автору
 
   для: Mookapek   (29.07.2009 в 00:12)
 

В поиск ходить опять мне?
http://softtime.ru/forum/read.php?id_forum=3&id_theme=36909

  Ответить  
 
 автор: Mookapek   (29.07.2009 в 01:56)   письмо автору
 
   для: Trianon   (29.07.2009 в 00:42)
 

Я в поиск заглядываю, когда случай общий, а у меня частный случай.
В той теме два предложенных автором способов - не оптимальные. В первом способе будут повторяться названия полей в каждой таблице, во втором способе будут неиспользуемые поля, поэтому не понимаю, почему вы посоветовали автору второй способ. На счет третьего - предложенного вами - пока изучаю...
Еще вы в той теме употребили такой термин как "нормализованная база". Это какая-такая база?

  Ответить  
 
 автор: Trianon   (29.07.2009 в 02:06)   письмо автору
 
   для: Mookapek   (29.07.2009 в 01:56)
 

Нормальная форма БД

  Ответить  
 
 автор: x64   (29.07.2009 в 08:56)   письмо автору
 
   для: Mookapek   (29.07.2009 в 01:56)
 

ну ответили уже, что спорить-то?
http://ru.wikipedia.org/wiki/Нормальная_форма

и никакой этот случай не частный. любой, кто хотя-бы немного имел дело с БД, сталкивается с такой проблемой. простейшая аналогия: каталог товаров. есть тиблица категорий, есть таблица товаров и есть таблица, их связывающая (связка идёт не по имени, а по уникальным идентификаторам; чаще всего — первичному ключу).

есть такая замечательная книга, с примерами на подобную тему: http://www.ozon.ru/context/detail/id/2631565/?partner=softtimeru

  Ответить  
 
 автор: Mookapek   (29.07.2009 в 14:15)   письмо автору
 
   для: x64   (29.07.2009 в 08:56)
 

Во-первых, я не спорю. Во-вторых, то что связка идет по первичному ключу - это я и так знаю, и к этой теме это не относится. В-третьих, книга такая у меня есть, но подобных примеров там нет. Так что потрудитесь внимательно читать то, что я описываю в теме.

  Ответить  
 
 автор: serjinio   (30.07.2009 в 02:14)   письмо автору
 
   для: Mookapek   (29.07.2009 в 00:12)
 

Может лучше такой вариант
1 таблица (категории)
"Квартира", "Коттедж", "Земельный участок"
2 таблица (данные "Квартира")
"Адрес", "Цена", "Кол. комнат"
3 таблица (данные "Коттедж")
"Адрес", "Цена", "Кол. комнат", "Площадь участка"
4 таблица (данные "Земельный участок")
"Адрес", "Цена", "Площадь участка"
ну и связи 2-3-4 таблиц с id таблицы 1

а если в 1 таблице добавить поле parent_id то можно сделать еще круче :)
id p_id    name
1    0      Квартира
2    0      Коттедж
3    0     Земельный участок
4    0     Дачи
5    1     Однокомнатные
6    1     Двухкомнатные
7    2     Деревянный коттедж
8    3     Участки в мухосранске
9    3     Участки в центре Вашингтона
10  4     Дачи на берегу реки.....

и тд...

  Ответить  
 
 автор: Trianon   (30.07.2009 в 17:54)   письмо автору
 
   для: serjinio   (30.07.2009 в 02:14)
 

Нет.
Именно потому, что БД не в нормальной форме.

Добавление / удаление свойств, не являющихся неотъемлимой частью схемы, не должно приводить к необходимости внесения изменений в структуру БД.

  Ответить  
 
 автор: Mookapek   (01.08.2009 в 01:36)   письмо автору
 
   для: Trianon   (30.07.2009 в 17:54)
 

Ваша схема вроде подходит под определение "нормальная форма бд".
vid_nedvijimosti:
id| name
1 | квартиры
2 | дома
3 | земля
4 | нежильё

options 
id| name| unit| type| comment 
1 | Адрес | 
2 | кол-во комнат | 
3 | площадь | кв.м
4 | расстояние до ст.метро | м

objects
id| id_vid | humman_key
1 | 1 | Твоя квартира
2 | 1 | Моя квартира

harakteristiki
id | id_obj | id_option | val
1 | 1 | 1 | г. Москва, Измайловский пр.2, 15 
2 | 1 | 2 | 3
3 | 1 | 3 | 60 
4 | 2 | 1 | г. Санкт-Петербург, Гражданский пр.24, 55 
5 | 2 | 2 | 5
6 | 2 | 3 | 80  

Только вот хотелось бы спросить, что должно хранится в поле humman_key таблицы objects?

  Ответить  
 
 автор: Trianon   (01.08.2009 в 01:47)   письмо автору
 
   для: Mookapek   (01.08.2009 в 01:36)
 

Ключевое (уникальное) название объекта.
Из меня риэлтер никакой. Поэтому не представляю, чем там они свои объекты идентифицируют.
Но врядли ж суррогатным ПК.

  Ответить  
 
 автор: Mookapek   (01.08.2009 в 22:20)   письмо автору
 
   для: Trianon   (01.08.2009 в 01:47)
 

А что вы скажете по поводу такой схемы:


Объекты
id | тип недвижимости| адрес | цена   |  кол. комнат
-----------------------------------------------------
1  |   квартира      | ...   | ... руб|  3


Коттедж
площадь участка | id_объекта
-----------------------------------
  5 соток       |         1

Зем. участок
площадь участка | id_объекта
----------------+------------------
  15 соток      |         1
 


Конечно же свойств объектов намного больше. Но суть в том, что в таблице "Объекты" содержатся общие свойства для всех типов недвижимости, и еще к каждому типу недвижимости отдельную таблицу для свойств, присущих только эти типам (в некоторых случаях не только одному типу недвижимости).

  Ответить  
 
 автор: Trianon   (01.08.2009 в 22:33)   письмо автору
 
   для: Mookapek   (01.08.2009 в 22:20)
 

>А что вы скажете по поводу такой схемы:
А что так криво то?

  Ответить  
 
 автор: Mookapek   (01.08.2009 в 23:31)   письмо автору
 
   для: Trianon   (01.08.2009 в 22:33)
 

Что именно криво?

  Ответить  
 
 автор: Рома   (02.08.2009 в 04:53)   письмо автору
 
   для: Trianon   (01.08.2009 в 01:47)
 

>Из меня риэлтер никакой. Поэтому не представляю, чем там они свои объекты идентифицируют.

Там это выглядит вот так.

  Ответить  
 
 автор: Mookapek   (06.08.2009 в 19:00)   письмо автору
 
   для: Mookapek   (01.08.2009 в 01:36)
 

У меня вопрос по данной схеме: если требуется вывести все объекты недвижимости и их характеристики, то производится сначала запрос к таблице objects, а потом запрос к таблицы harakteristiki. Т.е. общее количество запросов будет равно количеству объектов + 1. Не будет ли это большой нагрузкой на сервер?

  Ответить  
 
 автор: Trianon   (06.08.2009 в 21:59)   письмо автору
 
   для: Mookapek   (06.08.2009 в 19:00)
 

>если требуется вывести все объекты недвижимости и их характеристики, то производится сначала запрос к таблице objects, а потом запрос к таблицы harakteristiki.

Не обязательно. Таблицы в запросе можно соединить.

  Ответить  
 
 автор: Mookapek   (11.08.2009 в 01:17)   письмо автору
 
   для: Mookapek   (01.08.2009 в 01:36)
 

Кстати, у такой структуры, как мне кажется, есть существенный недостаток: значения val всех опций из таблицы options будут одного и того же типа данных.

  Ответить  
 
 автор: Trianon   (11.08.2009 в 01:32)   письмо автору
 
   для: Mookapek   (11.08.2009 в 01:17)
 

можно изменить структуру так, чтобы типы оказались разными.

  Ответить  
 
 автор: serjinio   (03.08.2009 в 06:57)   письмо автору
 
   для: Trianon   (30.07.2009 в 17:54)
 

Почему ? вот выдержка из www.microsoft.com/sql

Преобразование логической модели в физическую

При переходе от логической модели к физической сущности преобразуются в таблицы, 
а атрибуты — в поля (столбцы). 
Отношения между сущностями можно преобразовать в таблицы или оставить в виде внешних ключей.

В процессе проектирования физической базы данных необходимо соблюдать ряд общих правил:
# Каждая таблица должна иметь уникальный идентификатор (первичный ключ).
Все данные таблицы должны относиться к одной сущности.
# Желательно избегать атрибутов, способных принимать неопределенные значения.
# Таблица не должна содержать повторяющихся полей. 


1 таблица (Сущности)"Квартира", "Коттедж", "Земельный участок"

2 таблица (данные "Квартира") "Адрес", "Цена", "Кол. комнат"
3 таблица (данные "Коттедж") "Адрес", "Цена", "Кол. комнат", "Площадь участка"
4 таблица (данные "Земельный участок") "Адрес", "Цена", "Площадь участка"

  Ответить  
 
 автор: Trianon   (03.08.2009 в 09:58)   письмо автору
 
   для: serjinio   (03.08.2009 в 06:57)
 

И как клиент в рамках этой схемы сможет добавить пару тройку офисов, складов, ангаров?

  Ответить  
 
 автор: serjinio   (03.08.2009 в 10:31)   письмо автору
 
   для: Trianon   (03.08.2009 в 09:58)
 

естественно если добавляется новая сущность то под нее создается своя таблица с характеристиками..
но ТС писал Хм... если у меня есть три объекта - квартира, коттедж, земельный участок. те автоматом новая сущность не предусматривалась...

  Ответить  
 
 автор: Trianon   (03.08.2009 в 11:15)   письмо автору
 
   для: serjinio   (03.08.2009 в 10:31)
 

сущности добавляет разработчик, а не клиент.
Клиент добавляет объекты.
Так вот, данная схема не позволяет добавлять такие объекты, потому что отвлеченная сущность "арендуемый объект" в ней не заложена.
А так в принципе, конечно, имеет право.

  Ответить  
 
 автор: Mookapek   (03.08.2009 в 01:08)   письмо автору
 
   для: Mookapek   (28.07.2009 в 23:19)
 

А что можно сказать про такую структуру базы данных? В чем минусы?
три таблицы:
первая - просто ид объекта
вторая - список всевозможных свойств
третья - значения свойств для конкретного объекта


Object
+-------+
|id_obj |
+-------+
|   1   |
+-------+

Options 
+------+---------+
|id_opt| name    | 
+------+---------+
|   1  | Адрес   | 
|   2  | Площадь | 
|   3  | Цена    |
+------+---------+

Values
+--------+--------+----------------------------------+
| id_obj | id_opt |             value                |
+--------+--------+----------------------------------+
|    1   |    1   | г. Москва, Измайловский пр.2, 15 |
|    1   |    2   |            100 кв.м.             |
|    1   |    3   |            500 000 $             |
+--------+--------+----------------------------------+

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования