|
|
|
Вопрос по SQL и организации струтуры БД в Firebird
|
|||
|---|---|---|---|
|
#18+
Задача: необходимо хранить информацию об адресах и телефонах(телефонов в каждом адресе несколько, есть факсы. Вариант 1: в таблице адресов создать поле TEL и хранить все телефоны через запятую. Если факс - ставить перед номером букву "ф.". (А если нужно будет выбрать только телефоны или только факсы или выбрать не больше двух телефонов по каждому адресу? В принципе наверно можно будет с LIKE ф.% извратиться или со строками поработать... Но хочется оптимальный вариант выбрать) Вариант 2(больше нравится, с ним проблема): хранить таблицу адресов и таблицу телефонов(каждая запись(телефон) соответствует какому-то адресу). Проблема: если делать обычный select то сколько у адреса телефонов, столько раз этот адрес и будет дублироваться. Это некрасиво. Можно ли как нибудь или "*" повторяющиеся адреса забить или сделать чтобы в результатах запроса телефоны в какие нибудь вычисляемые столбцы выводились(в ширину)? Или можно написать триггер Update для таблицы телефонов, который бы обновлял другую таблицу, содержащую в каждой строке все телефоны соответствующие какому либо адресу через запятую: tel code|addr|telnum 1 | 1 |121212 2 | 1 |232323 3 | 2 |555555 4 | 2 |666666 5 | 3 |111111 mirrortel code|addr|telnum 1 | 1 |121212,232323,55555 2 | 2 |55555,66666 3 | 3 |111111 возможно ли это в триггере сделать? Может еще варианты есть. Посоветуйте как быть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 13:41:20 |
|
||
|
Вопрос по SQL и организации струтуры БД в Firebird
|
|||
|---|---|---|---|
|
#18+
а какого типа выборки будут нужны? рискну предложить усовершенствованный 3-й вариант: address(id,name,phones) phone(id,address_id,name) и при изменении таблицы обновлять address.phones ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 14:16:38 |
|
||
|
Вопрос по SQL и организации струтуры БД в Firebird
|
|||
|---|---|---|---|
|
#18+
А я бы сделал так Код: plaintext 1. 2. 3. В поле type будет храниться тип контакта - дом. тел., раб. тел., факс, моб. тел., e-mail и т.п. С выборкой только факса или только какого-то типа контактов - проблем не будет. Если надо выбирать все контакты, и при этом они должны быть через запятую в строчке, то это, по-моему, надо делать на клиенте (в смысле склеивать их в одну строчку). Хотя, как правильно спросил vis, все зависит от того какие выборки будут... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 14:56:39 |
|
||
|
Вопрос по SQL и организации струтуры БД в Firebird
|
|||
|---|---|---|---|
|
#18+
Вариант 2(больше нравится, с ним проблема): хранить таблицу адресов и таблицу телефонов(каждая запись(телефон) соответствует какому-то адресу). Проблема: если делать обычный select то сколько у адреса телефонов, столько раз этот адрес и будет дублироваться. Это некрасиво. Можно ли как нибудь или "*" повторяющиеся адреса забить или сделать чтобы в результатах запроса телефоны в какие нибудь вычисляемые столбцы выводились(в ширину)? adr(id_adr, address) phone(id_adr, type, num) можно написать ХП которая развернет телефоны для указанного id_adr в строку, а потом select a.address, ХП(a.id_adr) from adr ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 15:30:20 |
|
||
|
Вопрос по SQL и организации струтуры БД в Firebird
|
|||
|---|---|---|---|
|
#18+
пардон select a.address, ХП(a.id_adr) from adr a ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 15:32:07 |
|
||
|
Вопрос по SQL и организации струтуры БД в Firebird
|
|||
|---|---|---|---|
|
#18+
Насколько я понимаю, алгоритм ХП будет такой: 1. Взять id і-го адреса 2. Выбрать все телефоны соответсвующие ему. 3. В цикле слепить их в некоторую строковую переменную 4. Вернуть эту переменную Я не знаю синтаксиса ХП. Где его можно прочитать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 16:58:03 |
|
||
|
Вопрос по SQL и организации струтуры БД в Firebird
|
|||
|---|---|---|---|
|
#18+
А может все таки на клиенте в программе это сделать? Дополнительным запросом? И выводить данные эти оттдельно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2004, 07:56:47 |
|
||
|
Вопрос по SQL и организации струтуры БД в Firebird
|
|||
|---|---|---|---|
|
#18+
2Dimitrik А зачем нужны эти телефоны/факсы? Если надо автоматически дозваниваться до абонента и железным голосом говорить ему всякие гадости, тогда второй вариант, да еще с наворотами. Если секретарше (или кому еще) для справки - первого за глаза хватит, и нефига извращаться. 8-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2004, 09:11:51 |
|
||
|
Вопрос по SQL и организации струтуры БД в Firebird
|
|||
|---|---|---|---|
|
#18+
ХП что-то вроде этого: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. где TYPE_NUM: 'т', 'ф', а лучше сделать справочник.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2004, 09:16:53 |
|
||
|
Вопрос по SQL и организации струтуры БД в Firebird
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2004, 12:15:55 |
|
||
|
|

start [/forum/topic.php?fid=40&gotonew=1&tid=1578598]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
76ms |
get topic data: |
12ms |
get first new msg: |
8ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
| others: | 214ms |
| total: | 419ms |

| 0 / 0 |
