Варианты схемы базы данных.
как решается такая задача: строим "нашу" базу данных, в которую заносим информацию, получаемую из различных источников, где одни и те же сущности названы по-разному (например, на разных языках, или просто имя-фамилия или фамилия-имя, ...). т.е. получается, что у нас имеется "наше" значение для поля (пусть будет "имя"), которое мы хотим видеть в наших отчетах, и несколько "синонимов", по числу источников. например, имеется кто-то "ваня пупкин", но в источнике А его называют в. пупкин, в Б – пупкин ваня, в В - пупкин иван, ...
как можно организовать базу так, чтобы все было просто/понятно/удобно? и получить "наше" имя для отчета, и для каждого стороннего источника - имя, используемое в этом источнике?
одна таблица? несколько? какие? поделитесь опытом, как поступают в таких
случаях. или на что погуглить?
как поступают в таких случаях
для каждой ситуации будет свое решение. Выбирать Вам. Многое еще зависит, что будете делать с полями дальше - какие запросы.
Пока есть один объект который может иметь связь со многими: минимум 1:0 (когда данные не введены), максимум 1:N
То бишь это две таблицы: в одной ключ - автоинкрементый номер например, в другой ключ и текст
Что то типа этого
Можно и synonim_id в таблицу people добавить, а preffered_name убрать.
лучше опишу сценарий. имеем некое гуи, в котором - "видимые имена" (gui name). нам нужно обновить информацию о ком-то. выбираем имя (если обновляем для всех из списка - то же самое в цикле), и по этому имени и типу необходимой информации должны выбрать соответствующий источник (-ки) этой информации, и имя(имена), как оно пишется в этом источнике. например, хотим узнать нечто "актуальный рейтинг" нашего вани пупкина, и мы хотим актуализировать его рейтинг. в программе мы знаем gui name + info_type_rating, программа же знает, из каких источников (может быть несколько) мы можем получить этот рейтинг. из базы мы хотим по имени и источнику (лучше иметь номер или название? их вроде немного, строчка удобнее... ) получить имя вани для данного источника. если не получится получить рейтинг из этого источника - следующий источник (если имеется), и т.д. примерно так.
Особых изменений я не вижу, те же две таблицы Master-Detail
Отображается таблица people, выбираем gui_name и получаем список источников для этого имени. В каждом источнике имеется "реальное название человека" и "плугин ид" - часть отвечающая за вызов вычисления данных. Вычисленные данные записываются в таблицу. Можно еще добавить поле "интервал обновления" и брать либо данные из таблицы либо вычислять заново.
А куда народ то подевался? По отпускам разбежались? Мурка должна была гору рыбы на базах уже съесть.
пытаюсь коннектиться из 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
не помогло : (
дописываю:
создал нового юзыря после того, как изменил конфигурацию, с ним все в порядке. видимо, метод аутентификации привязан не к текущей конфигурации сервера, а к юзырю. выходит, юзырь, созданный с одной конфигурацией, должен логиниться так, а другой - иначе. будем знать... но, суки, могли бы и написать где-нибудь в гугле : )
да это я не могу толком объяснить, что к чему : )
короче, создаем две таблицы:
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;
и если оный там есть, то мы его получим. нет - следует добавить.
зы а что за тулец вы пользуете? имею ввиду скриншоты.
По теме - две таблицы.
От первой нужен только первичный ключ, определяющий персону.
Вторая - два вторичных ключа - на первую и на тоол - и инфо что в тооле показывать.
Т.е. исключаем детали персоны в первой таблице.
Во второй, хоть я и не люблю такое делать, нужно либо заводить строку с предопределенным значением тоола, либо добавлять колонку - использовать по умолчанию.
Вроде все.
что за тулец вы пользуете? имею ввиду скриншоты
EntityDeveloper от DevArt до 10 таблиц бесплатно экспорт/импорт
https://www.devart.com/entitydeveloper/
https://www.devart.com/entitydeveloper/editions.html
А если и "базу" у них купить то для нее не будет ограничений.
По теме - две таблицы.От первой нужен только первичный ключ, определяющий персону.Вторая - два вторичных ключа - на первую и на тоол - и инфо что в тооле показывать.Т.е. исключаем детали персоны в первой таблице.
как это "исключаем"? может, первая таблица тогда вообще не нужна? и вообще вся база : )
Во второй, хоть я и не люблю такое делать, нужно либо заводить строку с предопределенным значением тоола, либо добавлять колонку - использовать по умолчанию.Вроде все.
уверен, так можно решить какую-нибудь задачу. только не мою.
Что то более лучшего пока не попадалось. Давно давно был другой подобный инструмент, но сейчас он многие тысячи стоит.
Еще к нему купить "MSSQL" от того же деварта и можно забыть, что такое SQL многих задач. Мурке точно не подойдет, разве только чисто таблицы глянуть.
Моя ест творог с яйцом, сливками и глюкозой. Ну ей котят кормить надо...
Но от рыбки - не отказывается даже после плотного обеда - как раз сегодня покормил зверину и пошел готовить обед... из рыбки... прибежала и замиявила про свою долю... как только все было готово.