code: def get_collection_name(cls, from_class_name, collection_name=None, prefix=None):
          
          if not collection_name:
              collection_name = prefix + '_set'
              if hasattr(cls, collection_name):
                  #if the xxx_set is already existed, then automatically
                  #create unique collection_set id
                  collection_name = prefix + '_set_' + str(cls._collection_set_id)
                  cls._collection_set_id += 1
          else:
              if collection_name in cls._collection_names:
                  if cls._collection_names.get(collection_name) != from_class_name:
                      raise DuplicatePropertyError("Model %s already has collection property %s" % (cls.__name__, collection_name))
              #add property check
              if collection_name in cls.properties:
                  raise DuplicatePropertyError("Model %s already has property %s" % (cls.__name__, collection_name))
          return collection_name
docs: Get reference collection_name, if the collection_name is None
          then make sure the collection_name is not conflict, but
          if the collection_name is not None, then check if the collection_name
          is already exists, if existed then raise Exception.