powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Правильная Организация таблиц в БД
17 сообщений из 42, страница 2 из 2
Правильная Организация таблиц в БД
    #36928891
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JohnSparrow,

Спасибо за исчерпывающий трактат о древовидных хранилищах. Придраться практически не к чему. И если он пригодится нашей собеседнице, я считаю, что мучил Вас не зря :-)
...
Рейтинг: 0 / 0
Правильная Организация таблиц в БД
    #36929087
JohnSparrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пожалуйста

Как раз вожусь с обсуждавшимися аспектами "иерархической" темы, потому и писал так много. В смысле - рассуждения вслух и т.д., :)
...
Рейтинг: 0 / 0
Правильная Организация таблиц в БД
    #37026206
zvezda_t
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, уважаемые программисты!

Скажите пожалуйста, как правильно:
При записи данных в таблицу adres , передавать в хранимую процедуру все поля адреса(меня смущает что очень много переменных приходиться передовать хранимой процедуре, для каждого адреса 11 полей - и таких адресов 15), или достаточно передать в хранимую процедуру только код кладр, записываемого адреса, и сделать в хранимой процедуре расшифровку всех полей, сделав запрос к справочнику кладр прям из хранимой процедуры и потом только записать все адресные поля в adres ?
...
Рейтинг: 0 / 0
Правильная Организация таблиц в БД
    #37026231
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zvezda_t,

В прошлую пятницу я пропил свой телепатор. Как теперь Вас понять?
Какие 11 полей (и зачем столько), какие 15 адресов?
...
Рейтинг: 0 / 0
Правильная Организация таблиц в БД
    #37026261
zvezda_t
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
таблица
автор adres
-------------
[id] [int] IDENTITY(1,1) NOT NULL,
[id_doc] [int] NULL,
[type_address] [int] NULL,
[cod_kladr] [varchar](50) NULL,
[mail_index] [int] NULL,
[country] [nvarchar](50) NULL,
[region_kind] [nvarchar](50) NULL,
[region] [nvarchar](50) NULL,
[area_kind] [nvarchar](15) NULL,
[area] [nvarchar](50) NULL,
[city_kind] [nvarchar](15) NULL,
[city] [nvarchar](50) NULL,
[populated_kind] [nvarchar](15) NULL,
[populated] [nvarchar](50) NULL,
[street_kind] [nvarchar](15) NULL,
[street] [nvarchar](50) NULL,
[house_kind] [nchar](10) NULL,
[house] [nchar](15) NULL,
[corps] [nchar](15) NULL,
[quarter] [nchar](15) NULL

Виды адресов: рабочий, домашний, собственности, адрес родителей, и тд (всего их около 15)

Хранимая процедура
вариант 1)
Код: 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.
55.
56.
57.
58.
59.
60.
61.
ALTER PROCEDURE [dbo].[address] 
        @id_doc

	@cod_kladr_work varchar( 50 ),
	@mail_index_work int,
        @region_kind_work nvarchar( 50 ),
        @region_work nvarchar( 50 ),
        @area_kind_work nvarchar( 15 ),
        @area_work nvarchar( 50 ),
        @city_kind_work nvarchar( 15 ),
        @city_work nvarchar( 50 ),
        @populated_kind_work nvarchar( 15 ),
        @populated_work nvarchar( 50 ),
        @street_kind_work nvarchar( 15 ),
        @street_work nvarchar( 50 ),
	@house_work nchar( 10 ),
	@corps_work nchar( 10 ),
	@quarter_work nchar( 10 ),

        @cod_kladr_1 varchar( 50 ),
	@mail_index_1 int,
        @region_kind_1 nvarchar( 50 ),
        @region_1 nvarchar( 50 ),
        @area_kind_1 nvarchar( 15 ),
        @area_1 nvarchar( 50 ),
        @city_kind_1 nvarchar( 15 ),
        @city_1 nvarchar( 50 ),
        @populated_kind_1 nvarchar( 15 ),
        @populated_1 nvarchar( 50 ),
        @street_kind_1 nvarchar( 15 ),
        @street_1 nvarchar( 50 ),
	@house_1 nchar( 10 ),
	@corps_1 nchar( 10 ),
	@quarter_1 nchar( 10 ),
       
        @cod_kladr_2 varchar( 50 ),
	@mail_index_2 int,
        @region_kind_2 nvarchar( 50 ),
        @region_2 nvarchar( 50 ),
        @area_kind_2 nvarchar( 15 ),
        @area_2 nvarchar( 50 ),
        @city_kind_2 nvarchar( 15 ),
        @city_2 nvarchar( 50 ),
        @populated_kind_2 nvarchar( 15 ),
        @populated_2 nvarchar( 50 ),
        @street_kind_2 nvarchar( 15 ),
        @street_2 nvarchar( 50 ),
	@house_2 nchar( 10 ),
	@corps_2 nchar( 10 ),
	@quarter_2 nchar( 10 )
--и тд 15 раз
AS
BEGIN
    UPDATE dbo.adres SET cod_kladr=@cod_kladr_1, mail_index=@mail_index_1, house=@house_1, corps=@corps_1, quarter=@quarter_1,  region_kind=@region_kind_1, region=@region_1, area_kind=@area_kind_1, area=@area_1, city_kind=@city_kind_1, city=@city_1, populated_kind=@populated_kind_1, populated=@populated_kind_1 ,street_kind=@street_kind_1, 
    street=@street_1
    WHERE id_doc=@id_doc AND type_address='1' 

 UPDATE dbo.adres SET cod_kladr=@cod_kladr_2, mail_index=@mail_index_2, house=@house_2, corps=@corps_2, quarter=@quarter_2,  region_kind=@region_kind_2, region=@region_2, area_kind=@area_kind_2, area=@area_2, city_kind=@city_kind_2, city=@city_2, populated_kind=@populated_kind_2, populated=@populated_kind_2 ,street_kind=@street_kind_2, 
    street=@street_2
    WHERE id_doc=@id_doc AND type_address='2' 
--и тд 15 раз
end

вариант 2)
Код: 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.
ALTER PROCEDURE [dbo].[address] 
        @id_doc

	@cod_kladr_work varchar( 50 ),
        @cod_kladr_1 varchar( 50 ),
        @cod_kladr_2 varchar( 50 )
--и тд 15 раз
AS
BEGIN
      declare @cod_kladr_1 varchar( 50 ),
      declare	@mail_index_1 int,
      declare  @region_kind_1 nvarchar( 50 ),
      declare  @region_1 nvarchar( 50 ),
      declare  @area_kind_1 nvarchar( 15 ),
      declare  @area_1 nvarchar( 50 ),
      declare  @city_kind_1 nvarchar( 15 ),
      declare  @city_1 nvarchar( 50 ),
      declare  @populated_kind_1 nvarchar( 15 ),
      declare  @populated_1 nvarchar( 50 ),
      declare  @street_kind_1 nvarchar( 15 ),
      declare  @street_1 nvarchar( 50 ),
      declare  @house_1 nchar( 10 ),
      declare @corps_1 nchar( 10 ),
      declare @quarter_1 nchar( 10 )
 --и тд 15 раз  
Select @cod_kladr_1=..--здесь нужен запрос к справочнику кладр, который заполнит все переменные, по коду кладр 

--а потом
 UPDATE dbo.adres SET cod_kladr=@cod_kladr_1, mail_index=@mail_index_1, house=@house_1, corps=@corps_1, quarter=@quarter_1,  region_kind=@region_kind_1, region=@region_1, area_kind=@area_kind_1, area=@area_1, city_kind=@city_kind_1, city=@city_1, populated_kind=@populated_kind_1, populated=@populated_kind_1 ,street_kind=@street_kind_1, 
    street=@street_1
    WHERE id_doc=@id_doc AND type_address='1' 
--и тд 15 раз
end

Мне кажется первый вариант лучше))). Или я вообще не правильно делаю?
...
Рейтинг: 0 / 0
Правильная Организация таблиц в БД
    #37026646
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zvezda_tМне кажется первый вариант лучше))). Барышня, Вы что-нибудь о нормализации слышали? Вариант 2, кстати, ничем не лучше.

В таблице [adres] надо хранить: ID записи, KladrID, номера дома, корпуса, строения, помещения. Опционально можно в порядке денормализации хранить строку адреса, чтобы можно было быстро получить, а не делать CTE-запрос к таблице КЛАДРа. Можно еще почтовый индекс хранить. Еще флажок, что адрес введен от руки можно предусмотреть. И усе.
...
Рейтинг: 0 / 0
Правильная Организация таблиц в БД
    #37026802
zvezda_t
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Senya_Lzvezda_tМне кажется первый вариант лучше))). Барышня, Вы что-нибудь о нормализации слышали? Вариант 2, кстати, ничем не лучше.

В таблице [adres] надо хранить: ID записи, KladrID, номера дома, корпуса, строения, помещения. Опционально можно в порядке денормализации хранить строку адреса, чтобы можно было быстро получить, а не делать CTE-запрос к таблице КЛАДРа. Можно еще почтовый индекс хранить. Еще флажок, что адрес введен от руки можно предусмотреть. И усе.

То есть моя таблица должна выглядеть так:
автор adres
----------------------------------
[id] [int] IDENTITY(1,1) NOT NULL,
[id_doc] [int] NULL,
[type_address] [int] NULL,
[cod_kladr] [varchar](50) NULL,
[mail_index] [int] NULL,
[house] [nchar](15) NULL,
[corps] [nchar](15) NULL,
[quarter] [nchar](15) NULL
[address] [varchar](255) NULL

и в поле address - нужно записывать все поля country,region_kind, region, area_kind,area,city_kind,
city,populated_kind,populated,street_kind,street, а если адрес в веден в ручную, то в поле address записывать весь адрес введенный от руки - правильно?

Скажите пожалуйста, а если кладр обновить, прежний код кладр будет правильно расшифровываться (я хотела так подробно хранить данные, на случай если код в обновлённом кладере будет отличаться от кода прежнего кладра)?
...
Рейтинг: 0 / 0
Правильная Организация таблиц в БД
    #37027043
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zvezda_tи в поле address - нужно записывать все поля country,region_kind, region, area_kind,area,city_kind,
city,populated_kind,populated,street_kind,streetНе просто "записывать все поля", а хранить строку адреса в соответствии с установленными правилами форматирования. Если от руки введен, то тут уж ничего поделать не можем и формирование строки отдаем на откуп юзеру.

У меня поле IsManual так до сих пор не используется, что уберегло от множества ошибок. Зачастую операторы просто не указывают район, а потом голосят, что с. Мусохранска нет почему-то. )
...
Рейтинг: 0 / 0
Правильная Организация таблиц в БД
    #37027102
zvezda_t
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Senya_LНе просто "записывать все поля", а хранить строку адреса в соответствии с установленными правилами форматирования.

Дело в том, что с моей базой работают несколько приложений, и в одном из них адресная строка формируется в виде:
автор1) АДРЕС1:РОССИЯ, 105173, Москва г, , , , 9 Мая ул, 28, 3, 3
а в другом:
автор2)АДРЕС1:РОССИЯ, 105173, г Москва, , , , ул 9 Мая, д. 28, корпус. 3, кв. 3
и как мне быть?

Senya_LНе просто "записывать все поля", а хранить строку адреса в соответствии с установленными правилами форматирования.

У меня поле IsManual так до сих пор не используется, что уберегло от множества ошибок.
что это за поле -IsManual??

и еще скажите пожалуйста, а если кладр обновить, прежний код кладр будет правильно расшифровываться (я хотела так подробно хранить данные, на случай если код в обновлённом кладере будет отличаться от кода прежнего кладра)?
...
Рейтинг: 0 / 0
Правильная Организация таблиц в БД
    #37027211
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zvezda_tSenya_LНе просто "записывать все поля", а хранить строку адреса в соответствии с установленными правилами форматирования.

Дело в том, что с моей базой работают несколько приложений, и в одном из них адресная строка формируется в виде:
автор1) АДРЕС1 :РОССИЯ, 105173, Москва г, , , , 9 Мая ул, 28, 3, 3
а в другом:
автор2) АДРЕС1 :РОССИЯ, 105173, г Москва, , , , ул 9 Мая, д. 28, корпус. 3, кв. 3
и как мне быть?А вот это уже интересно. А что, может быть АДРЕС2 в той же строке? Судя по количеству запятых и парсите еще на клиенте.

А по поводу нескольких приложений. Если они между собой никак не связаны, то формируйте адресную строку на сервере.
авторчто это за поле -IsManual??Признак, что адресная строка сформирована от руки. В этом случае поля KladrID и номера дома, корпуса, помещения должны быть IS NULL. Соответствующий CHECK-ограничение легко составить.
...
Рейтинг: 0 / 0
Правильная Организация таблиц в БД
    #37027235
zvezda_t
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
скажите пожалуйста, а если кладр обновить, прежний код кладр будет правильно расшифровываться (я хотела так подробно хранить данные, на случай если код в обновлённом кладере будет отличаться от кода прежнего кладра)?
...
Рейтинг: 0 / 0
Правильная Организация таблиц в БД
    #37027250
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zvezda_tскажите пожалуйста, а если кладр обновить, прежний код кладр будет правильно расшифровываться (я хотела так подробно хранить данные, на случай если код в обновлённом кладере будет отличаться от кода прежнего кладра)?До кто ж его знает, как вы обновление реализуете.
...
Рейтинг: 0 / 0
Правильная Организация таблиц в БД
    #37027279
zvezda_t
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Senya_LДо кто ж его знает, как вы обновление реализуете.
хотела прежний кладр заменить новым и всё. а как правильно?
...
Рейтинг: 0 / 0
Правильная Организация таблиц в БД
    #37027445
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zvezda_tSenya_LДо кто ж его знает, как вы обновление реализуете.
хотела прежний кладр заменить новым и всё. а как правильно?Просто "взять и поменять" не получится. Как минимум слетят первичные ключи КЛАДРа. Также придется перенастраивать адресные ссылки (adres.KladrID или как вы его там называете) на новые актуальные элементы. Сверять с ALTNAMES.DBF слияния и прочие сложные преобразования. В двух словах этого не объяснишь.
...
Рейтинг: 0 / 0
Правильная Организация таблиц в БД
    #37027475
zvezda_t
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Senya_LПросто "взять и поменять" не получится. Как минимум слетят первичные ключи КЛАДРа. Также придется перенастраивать адресные ссылки (adres.KladrID или как вы его там называете) на новые актуальные элементы. Сверять с ALTNAMES.DBF слияния и прочие сложные преобразования. В двух словах этого не объяснишь.
adres.KladrID - это код кладр?
ужас... как сложно( где про это можно почитать?
...
Рейтинг: 0 / 0
Правильная Организация таблиц в БД
    #37028196
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zvezda_tужас... как сложно( где про это можно почитать?А вы думали что вот так вот запросто все сделаете? А читать нужно документацию здесь . Причем непросто читать, а творчески переосмыслить - готовых рецептов там нет.
...
Рейтинг: 0 / 0
Правильная Организация таблиц в БД
    #37033777
zvezda_t
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Senya_L,
большое Вам спасибо за помощь!!! Без Вас я бы не разобралась!
...
Рейтинг: 0 / 0
17 сообщений из 42, страница 2 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Правильная Организация таблиц в БД
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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