Первый ответ - Схема. Это слишком широко не используется, но определенно походит на твердый язык для использования, особенно рассматривая устойчивость DrScheme (который на самом деле компилирует программы Схемы в собственный двоичный код).
После этого - Haskell невероятно интересен. Это - язык, который делает отложенные вычисления правильно, и последствия невероятны (включая такие вещи как короткое определение последовательности fibonnaci).
более основное Движение, Python действительно широко все еще не принят в деловых кругах, но это определенно должно быть к настоящему времени...
Comments, PhotoComments, and EventComments are related in a pattern called "generalization specialization". This pattern is handled by simple inheritance in object oriented languages. It's a little more intricate to set up a schema of tables that will capture the same pattern.
But it's well understood. A quick google search on "generalization specialization relational modeling" will give you several good articles on the subject.
Если вы объедините их, это испортит структуру ключей. Вы должны иметь внешние ключи, допускающие значение NULL, или структуру «программных» клавиш, состоящую из ключа и типа. Я бы держал их отдельно.
Вы можете объединить их и добавить поле, которое указывает, для фотографии это или для события.
Вам понадобятся два внешних ключа; один для фотографий и один для событий, но, имея их в одной таблице, вы можете написать единый набор кода для обработки всех комментариев.
Но я разорван. Будет чище, если вы будете держать их отдельно, при условии, что вам никогда не придется смешивать два типа комментариев в одном списке (что потребует UNION).
Моим личным стилем дизайна было бы объединить их, а затем добавить целочисленный флаг, чтобы указать, для чего предназначен комментарий. Это также даст мне масштабируемость на тот случай, если я захочу добавить что-нибудь позже.