Deutsch

Варианты схемы базы данных.

399  1 2 все
moose старожил13.06.18 22:42
moose
13.06.18 22:42 

как решается такая задача: строим "нашу" базу данных, в которую заносим информацию, получаемую из различных источников, где одни и те же сущности названы по-разному (например, на разных языках, или просто имя-фамилия или фамилия-имя, ...). т.е. получается, что у нас имеется "наше" значение для поля (пусть будет "имя"), которое мы хотим видеть в наших отчетах, и несколько "синонимов", по числу источников. например, имеется кто-то "ваня пупкин", но в источнике А его называют в. пупкин, в Б – пупкин ваня, в В - пупкин иван, ...
как можно организовать базу так, чтобы все было просто/понятно/удобно? и получить "наше" имя для отчета, и для каждого стороннего источника - имя, используемое в этом источнике?

одна таблица? несколько? какие? поделитесь опытом, как поступают в таких случаях. или на что погуглить?

If idiots have a majority, it does not mean that they are right
#1 
AlexNek патриот13.06.18 23:34
AlexNek
NEW 13.06.18 23:34 
в ответ moose 13.06.18 22:42
как поступают в таких случаях

для каждой ситуации будет свое решение. Выбирать Вам. Многое еще зависит, что будете делать с полями дальше - какие запросы.


Пока есть один объект который может иметь связь со многими: минимум 1:0 (когда данные не введены), максимум 1:N

То бишь это две таблицы: в одной ключ - автоинкрементый номер например, в другой ключ и текст


Что то типа этого

Можно и synonim_id в таблицу people добавить, а preffered_name убрать.

#2 
moose старожил14.06.18 12:53
moose
NEW 14.06.18 12:53 
в ответ AlexNek 13.06.18 23:34, Последний раз изменено 14.06.18 12:56 (moose)

лучше опишу сценарий. имеем некое гуи, в котором - "видимые имена" (gui name). нам нужно обновить информацию о ком-то. выбираем имя (если обновляем для всех из списка - то же самое в цикле), и по этому имени и типу необходимой информации должны выбрать соответствующий источник (-ки) этой информации, и имя(имена), как оно пишется в этом источнике. например, хотим узнать нечто "актуальный рейтинг" нашего вани пупкина, и мы хотим актуализировать его рейтинг. в программе мы знаем gui name + info_type_rating, программа же знает, из каких источников (может быть несколько) мы можем получить этот рейтинг. из базы мы хотим по имени и источнику (лучше иметь номер или название? их вроде немного, строчка удобнее... ) получить имя вани для данного источника. если не получится получить рейтинг из этого источника - следующий источник (если имеется), и т.д. примерно так.

If idiots have a majority, it does not mean that they are right
#3 
AlexNek патриот14.06.18 22:32
AlexNek
NEW 14.06.18 22:32 
в ответ moose 14.06.18 12:53

Особых изменений я не вижу, те же две таблицы Master-Detail

Отображается таблица people, выбираем gui_name и получаем список источников для этого имени. В каждом источнике имеется "реальное название человека" и "плугин ид" - часть отвечающая за вызов вычисления данных. Вычисленные данные записываются в таблицу. Можно еще добавить поле "интервал обновления" и брать либо данные из таблицы либо вычислять заново.


А куда народ то подевался? По отпускам разбежались? Мурка должна была гору рыбы на базах уже съесть.

#4 
Murr патриот15.06.18 10:19
Murr
NEW 15.06.18 10:19 
в ответ AlexNek 14.06.18 22:32

А куда народ то подевался? По отпускам разбежались?

------

Не знаю.

Что почти никого нет - вижу. А куда подевались - фиг его знает...


Мурка должна была гору рыбы на базах уже съесть.

------

И?

#5 
BSDLamer Хвостатый Carpal Tunnel15.06.18 14:49
BSDLamer
NEW 15.06.18 14:49 
в ответ moose 13.06.18 22:42

если из разных источников, как вы определяете что "Вася Пупкин" из одного источника это тоже самое что и "В. Пупкин" из другого ?

0001, 0010, 0011, 0100, 0101, вышел зайчег погулядь
#6 
moose старожил15.06.18 15:42
moose
NEW 15.06.18 15:42 
в ответ AlexNek 14.06.18 22:32, Последний раз изменено 15.06.18 15:49 (moose)

пытаюсь коннектиться из c#, получаю:


{"Authentication method 'caching_sha2_password' not supported by any of the available plugins."} MySql.Data.MySqlClient.MySqlException


MS VS 2010

MySQL 8.0.11

MySql Connector Net 6.9.11


google мало продвинул. может, кто знает? так выглядит, что сервер ожидает один способ шифрования при аутентификации, а клиент (коннектор) использует другой. в коннекторе не нашел чтоб можно было покрутить что-то, в сервере пробовал дописать такое в my.ini:


[mysqld]
...
default_authentication_plugin=mysql_native_password


не помогло : (


дописываю:


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

If idiots have a majority, it does not mean that they are right
#7 
moose старожил15.06.18 18:39
moose
NEW 15.06.18 18:39 
в ответ AlexNek 14.06.18 22:32

нам, вообще-то, не нужен получать список источников. мы знаем, какой источник мы будем использовать, и хотим по гуинэйму найти произношение этого имени в данном источнике.

If idiots have a majority, it does not mean that they are right
#8 
moose старожил15.06.18 18:40
moose
NEW 15.06.18 18:40 
в ответ BSDLamer 15.06.18 14:49
если из разных источников, как вы определяете что "Вася Пупкин" из одного источника это тоже самое что и "В. Пупкин" из другого ?

вот именно!

If idiots have a majority, it does not mean that they are right
#9 
moose старожил15.06.18 18:41
moose
NEW 15.06.18 18:41 
в ответ Murr 15.06.18 10:19
Мурка должна была гору рыбы на базах уже съесть.------
И?

икает. видать, гора большая была.

If idiots have a majority, it does not mean that they are right
#10 
AlexNek патриот15.06.18 22:17
AlexNek
NEW 15.06.18 22:17 
в ответ Murr 15.06.18 10:19
И?

ну мяукнуть по тему мона было смущ

#11 
AlexNek патриот15.06.18 22:19
AlexNek
NEW 15.06.18 22:19 
в ответ moose 15.06.18 18:39
мы знаем, какой источник мы будем использовать

Вот именно мы знаем, а что бы и прога знала нужно ей все источники и все "произношения" вначале сказать. Или опять что я не понял в задаче?

#12 
moose старожил15.06.18 22:45
moose
NEW 15.06.18 22:45 
в ответ AlexNek 15.06.18 22:19, Последний раз изменено 15.06.18 22:46 (moose)

да это я не могу толком объяснить, что к чему : )

короче, создаем две таблицы:


create table items (item_id int not null auto_increment primary key,

name varchar(20) not null unique, ...);


вторую - так:


create table synonyms (syn_id int not null auto_incremented primary key,

team_id int not null unique referenses items,

context varchar(20) not null,

synonym varchar (30) not null,

unique (team_id, context))


теперь, зная "контекст" и имя объекта, получаем его псевдоним в данном контексте:


select synonym from synonyms where (select distinct item_id from items where name='ваня пупкин')=item_id;


и если оный там есть, то мы его получим. нет - следует добавить.


зы а что за тулец вы пользуете? имею ввиду скриншоты.

If idiots have a majority, it does not mean that they are right
#13 
Murr патриот16.06.18 10:52
Murr
NEW 16.06.18 10:52 
в ответ AlexNek 15.06.18 22:17

По теме - две таблицы.

От первой нужен только первичный ключ, определяющий персону.

Вторая - два вторичных ключа - на первую и на тоол - и инфо что в тооле показывать.

Т.е. исключаем детали персоны в первой таблице.

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

Вроде все.

#14 
AlexNek патриот16.06.18 14:32
AlexNek
NEW 16.06.18 14:32 
в ответ moose 15.06.18 22:45
что за тулец вы пользуете? имею ввиду скриншоты

EntityDeveloper от DevArt до 10 таблиц бесплатно экспорт/импорт

https://www.devart.com/entitydeveloper/

https://www.devart.com/entitydeveloper/editions.html

А если и "базу" у них купить то для нее не будет ограничений.

#15 
AlexNek патриот16.06.18 14:34
AlexNek
NEW 16.06.18 14:34 
в ответ Murr 16.06.18 10:52

ну рыбку заработал спок

Или чё там англицкие кошки любят? смущ

#16 
moose старожил16.06.18 16:10
moose
NEW 16.06.18 16:10 
в ответ AlexNek 16.06.18 14:32

спасибо, возможно, попробую. наверное, удобно?

If idiots have a majority, it does not mean that they are right
#17 
moose старожил16.06.18 16:13
moose
NEW 16.06.18 16:13 
в ответ Murr 16.06.18 10:52
По теме - две таблицы.От первой нужен только первичный ключ, определяющий персону.Вторая - два вторичных ключа - на первую и на тоол - и инфо что в тооле показывать.Т.е. исключаем детали персоны в первой таблице.


как это "исключаем"? может, первая таблица тогда вообще не нужна? и вообще вся база : )


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

уверен, так можно решить какую-нибудь задачу. только не мою.

If idiots have a majority, it does not mean that they are right
#18 
AlexNek патриот16.06.18 16:20
AlexNek
NEW 16.06.18 16:20 
в ответ moose 16.06.18 16:10

Что то более лучшего пока не попадалось. Давно давно был другой подобный инструмент, но сейчас он многие тысячи стоит.

Еще к нему купить "MSSQL" от того же деварта и можно забыть, что такое SQL многих задач. Мурке точно не подойдет, разве только чисто таблицы глянуть.


#19 
Murr патриот16.06.18 21:04
Murr
NEW 16.06.18 21:04 
в ответ AlexNek 16.06.18 14:34

Моя ест творог с яйцом, сливками и глюкозой. Ну ей котят кормить надо...

Но от рыбки - не отказывается даже после плотного обеда - как раз сегодня покормил зверину и пошел готовить обед... из рыбки... прибежала и замиявила про свою долю... как только все было готово.

#20 
1 2 все