|
|
|
Для чего создавать отдельную таблицу для одного поля
|
|||
|---|---|---|---|
|
#18+
Всем привет. Допустим необходимо создать БД для книжного портала. Создаем таблицу books и там помимо всего прочего должно быть поле origin-language. Отталкиваясь от примеров из различных уроков из интернета, я бы сделал отдельную таблицу languages, а поле origin_language из books сделал бы внешним ключом. Я не совсем понимаю, для чего выносить языки в отдельную таблицу? Видимо в этом есть какой-то смысл, но какой? Не лучше было бы в поле origin_language вносить просто число, заранее условившись для себя, к какому языку относится конкретное число (1-русский, 2-английский и т.д.)? Такой же вопрос с таблицей users и полем user_type. Некоторые создают отдельную таблицу user_type, чтобы хранить там типы пользователей (юзер, модератор, администратор и т.д.). Так же можно было бы просто хранить в таблице users поле user_type и там через запятую вписать числа, соответствующие типу пользователя, а затем парсить уже на уровне PHP. Спасибо всем заранее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2014, 22:23:25 |
|
||
|
Для чего создавать отдельную таблицу для одного поля
|
|||
|---|---|---|---|
|
#18+
такой финт ушами нужен в больших системах, как способ последовательного наращивания функционала для огромной таблицы добавление отдельного поля - дорогостоящая операция, поэтому можно завести новую таблицу и в запросах через leftjoin их обьединять кроме того, это способ избавления от избыточности. Дело в том, что в больших системах разные таблицы могут комбиироваться в разных сочетаниях, а если ты создал жестко все в одной - так комбинировать нельзя. > Не лучше было бы в поле origin_language вносить просто число, заранее условившись для себя, к какому языку относится конкретное число (1-русский, 2-английский и т.д.)? так это и есть стандартный способ сокращения данных. Вместо строкового поля, вы делаете число. И дальше заводите еще одну таблицу, в которой пишите соответствие числа - языку 1->русский 2->английский и в других таблицах вы храните числа 1 или 2, а если вдруг нужно текстовое название, то через join его присоединяете. если этого не делать, то в каждой строке придется хранить язык текстом, а это расточительно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2014, 22:43:40 |
|
||
|
Для чего создавать отдельную таблицу для одного поля
|
|||
|---|---|---|---|
|
#18+
murtukov , Хардкод плох почти везде (С)пёрто Чтобы изменить любое понятие, жестко заданное в программе, необходимо переписать программу. Это ваш путь? Вперед, барабан на шею, в руки палочки мышь и клаву, и с песней в светлое будущее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2014, 22:44:32 |
|
||
|
Для чего создавать отдельную таблицу для одного поля
|
|||
|---|---|---|---|
|
#18+
автор1->русский 2->английский и в других таблицах вы храните числа 1 или 2, а если вдруг нужно текстовое название, то через join его присоединяете. если этого не делать, то в каждой строке придется хранить язык текстом, а это расточительно. это не только расточительно, но и очень опасно.есть вероятность что может быть введено Английский, это можно отслеживать - но дополнительный код, исложности с добавление нового значения (нового языка) такие "простые" таблицы называют справочниками, через них строить прогу намного проще ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2014, 09:56:46 |
|
||
|
Для чего создавать отдельную таблицу для одного поля
|
|||
|---|---|---|---|
|
#18+
Cygapb-007Хардкод плох почти вездедадада, загвоздка только в том, что считать хардкодом, а что софткодом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2014, 17:37:13 |
|
||
|
Для чего создавать отдельную таблицу для одного поля
|
|||
|---|---|---|---|
|
#18+
Вадя не слушай их... люди знают правильный ответ, но не могут сформулировать. 1. чем отличаеться языки английский, украинский, русский, китайский. от номера дома на улице??? для адресов тоже будем заводить отдельную таблицу номера домов ,и ставить ссылку на нужную строку??? адреса(айди,улица, ссылка_на_айди_в_таблице_номераДомов) номераДомов(айди,номер) ...и данные типа 1-1 2-2 3-3 глупость очевидна? действительно зачем для домов отдельная таблица. 2 языки ничем не отличительные, более того, а зачем вообще языки нам английский, китайский итд... пускай будут языки 1 2 3 4 5 ...будем щитать что это родные названия языков, (нумерация по алфавиту Аварский- 1, албанский -2 ...и так дальше.) чем плохо? данные на языке первом, будем хранить в хранилище под именем данные_1 на втором данные2 и так далее. и везде где нам надо чтото про первый язык так и будем называть - 1. 3.и все у нас круто, кроме одного, исторически сложилось, что человек не захотел как машина все нумеровать, он привык всё называть, и поэтому когда мы хотим пользователю системы чтото вывести, нам нужно номер перевести в название. - нужен как правильно подметили выше справочник. что первый язык это Аварский, стодвацатьседьмой ноль ноль первый это локалхост, вторая диета это вегитаринская-без-рыбы, 10 група товаров - это кисломолочка, 3 месяц это март, а второй день вторник(у американцев второй день тоже вторник, там номера с нуля :) ) и можешь пойти двумя дорогами 1) писать сразу везде в коде - если 1 - значит Аварский, если 2 значит Албанский ...и так сколько у тебя языков... если их 3, впринципе умом ты не тронешься... пока не окажеться что надо добавить подддержку нового языка... и прийдёться по всему коду бегать добавлять строку в оператор выбора. можно сразу предусмотреть все языки(сколько их...штук 500!?) ну тут ты сразу поймешь что не туда пошол. 2)хранить справочник в пхп-файле конфиге, где будет просто масив... а потом когда нужно будет писать кусок кода на питоне биться головой в стену что справочник тебе не доступен. или на делфи будет ктото делать приложение, использующее твою базу магазина, для статистики и снава биться головой в стену - что справочник то не доступен - он же ввиде пхп файла... а можно сразу начать летать не умея ходить - хранить справочник в базе... можно спросить, а чем база лучше файла?... тем что справочник по нумерации языков, нужен только в контексте самих данных с номерами языков, которые лежат в базе... и если какойто код может залезть за данными и выбрать их на языке sql, то он точно сможет получить справочник. ========== это простые истины, но поначалу не понятны...ибо нету опыта (не наступал на грабли, не бился головой в стену) - а на слово мы верили только папе с мамой, и то только в раннем детсве, и то невсегда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2014, 16:13:43 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38630794&tid=1834893]: |
0ms |
get settings: |
12ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
43ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 228ms |
| total: | 337ms |

| 0 / 0 |
