Вопрос на дизайне таблицы

Судя по ограниченному контексту вашего вопроса, я считаю, что вы пытаетесь удалить \n из имени файла, а не из содержимого. Попробуйте это:

numFile = open(sys.stdin.read().rstrip('\n'),'r')
7
задан Matt Dawdy 29 April 2009 в 16:58
поделиться

8 ответов

Создайте две таблицы.

В одной есть все о городе.

Один из них содержит несколько названий городов, а внешний ключ связывает этих имен с идентификатором первой таблицы. Таким образом, у вас есть отношения один ко многим между названиями городов и городов.

Теперь единственная проблема заключается в различении одного имени для каждого города, которое является предпочтительным именем. Мы можем сделать это несколькими способами: 1) первая таблица может иметь fk для второй таблицы, которая содержит идентификатор предпочтительного имени. Это создает круговую зависимость, хотя. Так что лучше, 2) просто добавьте логический / битовый столбец во вторую таблицу is_preffered.

create table city (id not null primary key, other columns ) ;

create table city_name (
 id not null primary key, 
 city_id int references city(id), 
 name varchar(80),
 is_preferred bool  
) ;

Затем, чтобы получить все имена, с предпочтительным именем сначала:

   select name from city_names where city_id = ? 
   order by is_preffered desc, name;

Это имеет дополнительное преимущество: если вы не охватите все город и город, Вы можете использовать вторую таблицу для отображения городов / деревень / округов, которые вы не покрываете, по основным городам, которые вы делаете:

 insert into city_name(city_id, name) values
 ( $id-for-New-York-City, 'New York'),
 ( $id-for-New-York-City, 'Manhattan'),
 ( $id-for-New-York-City, 'Big Apple'),
 ( $id-for-New-York-City, 'Brooklyn');
5
ответ дан 6 December 2019 в 23:13
поделиться

Возможно, вы захотите взглянуть на более полнофункциональную систему полнотекстового поиска, такую ​​как Apache Lucene / Solr или Sphinx - которая может поддерживать этот вид сопоставления строк изначально.

1
ответ дан 6 December 2019 в 23:13
поделиться

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

Прежде чем искать запрос пользователя, преобразуйте все слова в обычную форму, используя эту таблицу.

Так что в вашем случае в сокращении к нормальному ] у нас будет таблица

 ______________
| short|normal |
|______|_______|
|St    |Saint  |
|St.   |Saint  |
3
ответ дан 6 December 2019 в 23:13
поделиться

Я вижу несколько возможных способов справиться с этим. Одним из них является алгоритм поиска soundex , который соответствует сходству английских строк. Кроме того, это поддерживается изначально в некоторых базах данных, таких как PostgreSQL .

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

1
ответ дан 6 December 2019 в 23:13
поделиться

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

Правилами нормализации могут быть:

Saint => St
St. => St

и т. д.

Нормализованные имена должны совпадать.

1
ответ дан 6 December 2019 в 23:13
поделиться

ИМХО, я бы оставил базу данных в покое и вместо этого имел бы список городов в своем приложении. Проще, чище и не требует много лишних.

0
ответ дан 6 December 2019 в 23:13
поделиться

Мне нравится опция в первом ответе.

Еще одна мысль будет иметь столбец для тегов для этого города, который пользователи могут обновлять.

т.е.

Нью-Йорк Город - это официальное название.

Теги для этого города были бы исчисляемыми (Манхэттен, Нью-Йорк, Нью-Йорк, город, большое яблоко ...) и т. Д., Но вы не хотели бы, чтобы весь этот мусор был в вашей главной таблице городов или для создания ассоциированных дочерние таблицы и должны делать объединения. Так что просто поместите его в столбцы и выполните поиск по критерию поиска, а затем верните правильное имя, если оно найдено.

0
ответ дан 6 December 2019 в 23:13
поделиться

You can use the built in SQL FTS properties for thesaurus entries. This allows you to buld a custom word map inside full text search . That way you can keep everything inside FTS rather than mix FTS and other queries.

Not sure which version of SQL you are using as its differant between 2005/8 so there is a good walkthrough for 2005 / 8 here http://arcanecode.com/2008/05/28/creating-custom-thesaurus-entries-in-sql-server-2005-and-2008-full-text-search/

0
ответ дан 6 December 2019 в 23:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: