Соглашения о присвоении имен MySQL, имя поля должно включать имя таблицы?

Другие решения хороши, но они конкретно не включают буквы с нулевой частотой. Вот подход, который делает, но примерно в 2-3 раза медленнее, чем другие.

import string
counts = {c: len([w for w in words if c in w.lower()]) for c in string.ascii_lowercase}

, который выдает подобное: ] https://github.com/dwyl/english-words/

import string
import timeit
import random
from collections import Counter

def f1(words):
    c = Counter()
    for word in words:
        c.update(set(word.lower()))
    return c

def f2(words):
    return Counter(
        c
        for word in words
        for c in set(word.lower()))

def f3(words):
    d = {}
    for word in words:
        for i in set(word.lower()):
            d[i] = d.get(i, 0) + 1
    return d


def f4(words):
    d = {c: len([w for w in words if c in w.lower()]) for c in string.ascii_lowercase} 
    return d


with open('words.txt') as word_file:
    valid_words = set(word_file.read().split())

for exp in range(5):

    result_list = []
    for i in range(1, 5):
        t = timeit.timeit(
            'f(words)',
            'from __main__ import f{} as f, valid_words, exp; import random; words = random.sample(valid_words, 10**exp)'.format(i),
            number=100)
        result_list.append((i, t))

    print('{:10,d} words | {}'.format(
        len(words),
        ' | '.join(
            'f{} {:8.4f} sec'.format(i, t) for i, t in result_list)))

print(f4(random.sample(valid_words, 10000)))
print(f4(random.sample(valid_words, 1000)))
print(f4(random.sample(valid_words, 100)))
print(f4(random.sample(valid_words, 10)))

16
задан Brian Tompsett - 汤莱恩 31 December 2016 в 22:12
поделиться

7 ответов

Я согласен с вами. Единственное место, где я хочу указать имя таблицы или его сокращенную форму, - это первичный и внешний ключи или если «естественное» имя является ключевым словом.

Users: id or user_id, username, password, last_login_time
Post: id or post_id, user_id, post_date, content

Обычно я использую «id» в качестве имени поля первичного ключа, но в этом случае я думаю, что user_id и post_id тоже в порядке. Обратите внимание, что дата публикации была названа "post_date", потому что "date" - ключевое слово.

По крайней мере, это мое соглашение. Ваш пробег может отличаться.

13
ответ дан 30 November 2019 в 17:05
поделиться

Префикс имени столбца именем таблицы - это способ гарантировать уникальные имена столбцов, что упрощает объединение.

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

Как модельер данных, мне трудно постоянно быть последовательным. Со столбцами идентификаторов я теоретически предпочитаю иметь только ID, но я обычно нахожу, что у меня есть таблицы со столбцами, называемыми USER_ID, ORDER_ID и т. Д.

Существуют сценарии, в которых может быть положительно выгодно использовать общее имя столбца в нескольких таблицах. Например, когда логическое отношение супертипа / подтипа отображено как дочерние таблицы, полезно сохранить столбец супертипа во всех таблицах подтипа (например, ITEM_STATUS) вместо того, чтобы переименовывать его для каждый подтип (ORDER_ITEM_STATUS, INVOICE_ITEM_STATUS и т. д.). Это особенно верно, когда они являются перечислениями с общим набором значений.

2
ответ дан 30 November 2019 в 17:05
поделиться

На самом деле, есть причина для такого наименования, особенно когда речь идет о полях, к которым вы, вероятно, присоединитесь. По крайней мере, в MySQL вы можете использовать ключевое слово USING вместо ON, тогда users u JOIN posts p ON p.user_id = u.id становится users u JOIN posts p USING(user_id), что чище IMO.

Что касается полей других типов, вы можете воспользоваться преимуществами выбора *, поскольку вам не нужно указывать список полей, которые вам нужны, и не знать, какое поле происходит из какой таблицы. Но в целом использование SELECT * не рекомендуется по соображениям производительности и обслуживания, поэтому я считаю плохой практикой добавление префикса к таким полям с именем таблицы, хотя оно может различаться в зависимости от приложения.

1
ответ дан 30 November 2019 в 17:05
поделиться

Не вижу смысла включать имя таблицы, это лишнее. В запросах вы можете ссылаться на поля как <имя таблицы>. <Имя поля> в любом случае (например, «user.id»).

10
ответ дан 30 November 2019 в 17:05
поделиться

В общих полях, таких как 'id' и 'name', хорошо указать имя таблицы.

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

Это личные предпочтения, на самом деле, но это причина (и я всегда так делаю).

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

4
ответ дан 30 November 2019 в 17:05
поделиться

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

Это я взял из схемы именования CakePHP и думаю это довольно красиво.

3
ответ дан 30 November 2019 в 17:05
поделиться

Например, в вашей базе данных есть таблицы, в которых хранится информация об отделах продаж и кадров, вы можете назвать все свои таблицы, относящиеся к отделу продаж, как показано ниже:

SL_NewLeads SL_Territories SL_TerritoriesManagers

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

HR_Candidates HR_PremierInstitutes HR_InterviewSchedules

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

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

1
ответ дан 30 November 2019 в 17:05
поделиться
Другие вопросы по тегам:

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